2010-01-02 58 views
0

比方说,用户将文件拖放到我的批处理文件中,这会导致批处理文件将文件复制到某个目录。问题是以下命令:CMD:检查报价

copy "%1" "C:\path\to\it" 

这里的问题是关于%1的引号。当你在批处理文件中拖放某些东西时,通常它不会放引号,所以一切都很好。但是当我将我的批处理文件转换为EXE时,它实际上会将引号放在那里。

所以,我想要做的是,检查文件是否有引号,如果没有,比做上面的命令,否则,执行不带引号的命令。

谢谢。

回答

2

以下工作?

copy %1 "C:\Dir1\Dir2" 

我几次尝试找到未引用%1的问题并未产生不良影响。

+0

+1。实际上,带空格的文件名总是被引号引用,这些引号*是参数的一部分。将引号放在'%1'周围通常是多余的。这并不一定要与批处理转换器相关联。 – Joey 2010-01-02 17:46:43

+0

是的,我明白了。谢谢。 – 2010-01-02 17:56:52

0

问题是您转换为EXE的过程。尝试不同的BAT到EXE转换器。

+0

我不能只检查报价? – 2010-01-02 17:30:53

1

不知道这里给出的答案是你要找的,我可能晚了几年,但我想为你的报价问题提供一个备用的解决方案,因为我碰到类似的东西。也许这会让别人受益。

您可以从各个变量中删除引号,包括拖放的引号。具体方法如下:

  • 波浪线添加到%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

取代技术具有其它的应用,因为你可以很容易地替换为任何其他任何字符(例如,:\ = _以替代下划线背的斜线)。

希望这会有所帮助!