比方说,用户将文件拖放到我的批处理文件中,这会导致批处理文件将文件复制到某个目录。问题是以下命令:CMD:检查报价
copy "%1" "C:\path\to\it"
这里的问题是关于%1
的引号。当你在批处理文件中拖放某些东西时,通常它不会放引号,所以一切都很好。但是当我将我的批处理文件转换为EXE时,它实际上会将引号放在那里。
所以,我想要做的是,检查文件是否有引号,如果没有,比做上面的命令,否则,执行不带引号的命令。
谢谢。
比方说,用户将文件拖放到我的批处理文件中,这会导致批处理文件将文件复制到某个目录。问题是以下命令:CMD:检查报价
copy "%1" "C:\path\to\it"
这里的问题是关于%1
的引号。当你在批处理文件中拖放某些东西时,通常它不会放引号,所以一切都很好。但是当我将我的批处理文件转换为EXE时,它实际上会将引号放在那里。
所以,我想要做的是,检查文件是否有引号,如果没有,比做上面的命令,否则,执行不带引号的命令。
谢谢。
以下工作?
copy %1 "C:\Dir1\Dir2"
我几次尝试找到未引用%1
的问题并未产生不良影响。
问题是您转换为EXE的过程。尝试不同的BAT到EXE转换器。
我不能只检查报价? – 2010-01-02 17:30:53
不知道这里给出的答案是你要找的,我可能晚了几年,但我想为你的报价问题提供一个备用的解决方案,因为我碰到类似的东西。也许这会让别人受益。
您可以从各个变量中删除引号,包括拖放的引号。具体方法如下:
%n
变量(例如,copy %~1 "C:\path\to\it"
)批处理文件中的其他变量,使用了类似的技术,这个时候进行双引号的替代白白:"=
,如:
set filename="C:\path\to\it"
echo %filename% (will give you "C:\path\to\it")
set noquotefilename=%filename:"=%
echo %noquotefilename% (will give you C:\path\to\it without the quotes)
这不是我原来的解决方案,但我发现它靠近下列文章底部:
Removing double quotes from variables in batch file creates problems with CMD environment
取代技术具有其它的应用,因为你可以很容易地替换为任何其他任何字符(例如,:\ = _以替代下划线背的斜线)。
希望这会有所帮助!
+1。实际上,带空格的文件名总是被引号引用,这些引号*是参数的一部分。将引号放在'%1'周围通常是多余的。这并不一定要与批处理转换器相关联。 – Joey 2010-01-02 17:46:43
是的,我明白了。谢谢。 – 2010-01-02 17:56:52