cmd 批处理脚本中引号内的引号问题

Issue with quotations inside quotations in cmd batch script

这是我第一次 post 来这里。我对批处理脚本只有一些非常基础的知识。

我有一个 D:\SOURCE 目录,其中包含带有图像的子目录。我正在使用命令行程序 (Irfanview) 调整图像大小并将其转换为不同的格式。我使用 FOR /D 循环查看 D:\SOURCE 中的所有文件夹,并将整个路径存储到 %d 中的子文件夹,然后使用 IF 循环忽略目标位置已存在的文件夹。

这是我的代码:

FOR /D %%d IN ("D:\SOURCE\*") DO ( 

if NOT exist D:\DESTINATION\%%~nd (
"%ProgramFiles%\IrfanView\i_view64.exe %%d\*.tif /resize=(50p,50p) /dpi=(150,150) /resample /convert=D:\DESTINATION\%%~nd\*.jpg"
)
)

这里的问题是“C:\Program Files”中的space。除非用引号括起来,否则该路径不起作用。另一方面,整个句子需要用引号括起来,否则 %d 和 %~nd 将不起作用。因此,我需要在整个带引号的字符串中用引号将 .exe 的路径括起来。我在这里阅读了很多 post 解决类似问题的文章,但 none 的解决方案对我有用。既没有 ", 也没有 ^"、""、""",也没有将 "C:\Program Files\IrfanView\i_view64.exe" 声明为变量。

这一定是一种非常普遍的情况,所以我确信一定有一个非常基本的解决方案被我忽略了。或者也许我的整个方法都是错误的,还有另一种明显的方法可以做到。感谢所有回复。

您想部分引用参数,一个好的程序应该理解引用的参数。

FOR /D %%d IN ("D:\SOURCE\*") DO ( 

  if NOT exist D:\DESTINATION\%%~nd (
    "%ProgramFiles%\IrfanView\i_view64.exe" "%%d\*.tif" ^
        /resize="(50p,50p)" ^
        /dpi="(150,150)" ^
        /resample ^
        /convert="D:\DESTINATION\%%~nd\*.jpg"
  )
)