将Windows批处理文件命令中的变量和字符串连接在引号内

时间:2019-07-09 18:14:01

标签: batch-file cmd

我试图遍历目录,并对每个jpg文件执行以下操作:

magick "C:\InputFolder\001.jpg" -trim "C:\OutputFolder\001.jpg"

到目前为止,我有这个:

 for %%f in (*.jpg) do
 magick "C:\InputFolder\%%~nf.jpg" -fuzz 50% -trim "C:\OutputFolder\%%~nf.jpg"

但这不起作用,如何在带引号的字符串中获取%%〜nf变量?

2 个答案:

答案 0 :(得分:1)

要遍历给定目录,建议使用for /r

批量:

@echo off

set "des=C:\OutputFolder"

for /r "C:\InputFolder" %%A in (*.jpg) do (
    magick "%%A" -fuzz 50%% -trim "%des%\%%~nxA"
)

(您可能需要将-fuzz 50%上的百分号加倍以进行批处理)。

从命令:

for /r "C:\InputFolder" %A in (*.jpg) do (magick "%A" -fuzz 50% -trim "C:\OutputFolder\%~nxA")

最后一组括号不是必需的,但我喜欢使用它们。

参考:FORParameters/Arguments

答案 1 :(得分:0)

无论您是使用CLI还是编写批处理脚本,都需要使用括号来使代码在DO语句后跨越多行。

假设您正在编写CMD脚本(因为您拥有%%而不是%),那么该操作就很有用:

@(
  SetLocal
  ECHO OFF
  SET "_Dst=C:\OutputFolder"
)

FOR %%A in (
  "C:\InputFolder\*.jpg"
) DO (
  ECHO. Magick "%%~fA" -fuzz 50%% -trim "%_Dst%\%%~nA"
  Magick "%%~fA"-fuzz 50%% -trim "%_Dst%\%%~nA"
)

如果您在CLI(CMD)窗口中,则可以粘贴以下内容:

@ECHO OFF
SET "_Dst=C:\OutputFolder"
FOR %A in (
  "C:\InputFolder\*.jpg"
) DO (
  ECHO. Magick "%~fA" -fuzz 50% -trim "%_Dst%\%~nA"
  REM Magick "%~fA" -fuzz 50% -trim "%_Dst%\%~nA"
)