【发布时间】:2018-06-14 14:38:45
【问题描述】:
我有一个包含命令FC 的差异脚本,因此我只需在其上放置两个文件:
FC /L /N "%1" "%2" > diff.out.txt 2> diff.err.txt
它工作正常,但如果其中一个文件的名称中有空格...
例如,我的文件路径是 C:\Users\joH1\Desktop\file_with a_space.txt 和 C:\Users\joH1\Desktop\file_2.txt,我收到错误消息(对不起本地化):
FC : commutateur non valide
FC : impossible d'ouvrir C:\USERS\JOH1\DESKTOP\FILE_WITH - Ce fichier ou dossier n'existe pas
因此,文件名被拆分为两个单独的参数,即使路径被引用。
为了找出它的来源,我在脚本中添加了几行代码:
echo %1
echo %2
FC /L /N "%1" "%2" > diff.out.txt 2> diff.err.txt
pause
我得到了 echos 的正确输出(尽管 args 没有被引用!):
"C:\Users\joH1\Desktop\file_with a_space.txt"
"C:\Users\joH1\Desktop\file_2.txt"
我什至尝试使用 dir 来确保 echo 没有合并拆分的 args,并且我得到了正确的结果(文件被识别并列出 => 名称未拆分)。
所以;我猜FC 是罪魁祸首。
有没有办法告诉它不要分割文件名? (应该像引号一样?)
如果可能的话,我想要一种与拖放兼容的方式,并且不是重命名文件而不使用空格...
提前致谢!
【问题讨论】:
-
不,不是
fc导致问题;您正在将文件拖放到脚本中,因此 Windows/cmd可能会根据需要添加引号(因此当存在空格或特殊字符时),使用"%1"时会加倍;使用"%~1"是答案所示的最佳解决方案,因为~在引用参数之前删除了潜在的引号......
标签: windows batch-file arguments parameter-expansion