13

Little Willis here. I am trying to using a batch script to edit an existing registry key that is used when double clicking a .jar file. The issue is that the data that I'm trying to enter contains quotes but I also need quotes for it to be considered a string.

Example:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* /f

When I run that in a batch script the cmd window prints out "Error: Too many command line parameters"

So to make this simple. I want to add a registry key with "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* as the data including the quotations and the %1 and %* exactly as they are not converted to any actual statement or string.

EDIT:

The registry is normally added using using this command line string:

ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*  

it works fine in the command line, but just as the code given below when I used this in a batch script the "%1" and %* don't appear.

Trey
  • 151
  • 1
  • 4
  • 12

4 Answers4

21

Use backslashes to escape the inner quotes, i.e.:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%1\" %*" /f
Marc
  • 11,403
  • 2
  • 35
  • 45
  • You answered about halve my question. The output of what you gave me was "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "" " /f instead of "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* – Trey Mar 05 '12 at 02:47
  • Okay. I put the quotation before the /f so now it doesn't ask me if I want to override the existing registry key but the output is still relatively the same. "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "" The "%1" is turning just into "" and the %* isn't appearing. – Trey Mar 05 '12 at 02:56
  • Not sure why that's not working. As an alternative, you could export the registry key you want using the regedit.exe right-click menu, and then use "reg restore" in your batch file to restore the key. That would save you some of this trouble. Examining the exported file will also give you a clue to how to format for "reg add". – Marc Mar 05 '12 at 03:09
15

Percent literals must be doubled in a batch file: \"%%1\" %%*"

dbenham
  • 127,446
  • 28
  • 251
  • 390
3

as an addition to dbenham's answer, you should use backslaches and quotes for location path !!
(i mean, you should use "\"C:\Program Files..... instead of "C:\Program Files..... )

so this is the final answer for typical percent sign & adding problem:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%%1\"" /f

thanks dbenham!

selnomeria
  • 31
  • 1
1

Another alternative is to use single quotes, some applications can read it properly, example:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "'C:\Program Files\Java\jre7\bin\javaw.exe\' -jar '%1' %*" /f
AllGamer
  • 121
  • 3