diff --git a/lib/boom/platform.rb b/lib/boom/platform.rb
index <HASH>..<HASH> 100644
--- a/lib/boom/platform.rb
+++ b/lib/boom/platform.rb
@@ -75,10 +75,12 @@ module Boom
       #
       # Returns the String value of the Item.
       def copy(item)
+        value = item.value.gsub("\'","\\'")
         unless windows?
-          system("printf '#{item.value.gsub("\'","\\'")}' | #{copy_command}")
+          value = value.gsub('%','%%')
+          system("printf \"#{value}\" | #{copy_command}")
         else
-          system("echo #{item.value.gsub("\'","\\'")} | #{copy_command}")
+          system("echo #{value} | #{copy_command}")
         end
 
         item.value
diff --git a/test/test_platform.rb b/test/test_platform.rb
index <HASH>..<HASH> 100644
--- a/test/test_platform.rb
+++ b/test/test_platform.rb
@@ -5,6 +5,11 @@ class TestPlatform < Test::Unit::TestCase
   def setup
   end
 
+  def test_can_handle_percent_strings
+    Boom::Platform.expects("system").with('printf "val%%ue" | pbcopy')
+    Boom::Platform.copy(Boom::Item.new('name','val%ue'))
+  end if !Boom::Platform.windows?
+
   def test_darwin
     assert_equal Boom::Platform.darwin?, RUBY_PLATFORM.include?('darwin')
   end
Percent signs should be escaped for `printf`

This is relevant to non-Windows environments. Closes #<I>.