批处理文件使用参数和字符串来创建路径

时间:2014-06-11 01:14:33

标签: variables batch-file path concatenation

我知道那里有很多东西,但我无法让它发挥作用。我想做的是

@ECHO OFF
FOR /D %%D IN (*) Do (
  ECHO %%D

  if not exists %%D.mp4 (
   rem cd %%D
   rem "C:\Program Files\Handbrake\HandBrakeCLI.exe" -i "VIDEO_TS" -o "..\%%D.mp4" --preset="High Profile" --x264-preset slow
   echo not exists
  )
  rem cd ..\
)

我把额外的东西留在那里,所以你可以看到我实际上需要/ D而不是/ R.基本上我将其他文件夹中的VIDEO_TS文件夹转换为父名称的mp4并将其放在根目录中。

问题是检查文件是否已存在。我无法弄清楚如何创建一条存在的路径"将识别出var %% D和后缀.mp4

非常感谢任何帮助。

谢谢,

R

1 个答案:

答案 0 :(得分:0)

这里有两个错误

  1. 关键字为EXIST,而非EXISTS
  2. 由于文件名中的空格,您需要将变量括在双引号中。
  3. 示例:

    @ECHO OFF
    FOR /D %%D IN (*) DO (
      ECHO %%D
    
      IF NOT EXIST "%%D.mp4" (
       ECHO not exists
      )
    )
    

    此外,如果您取消注释其他行,则会遇到问题,因为cd ..cd "%%D"的分支级别不同(请注意我在此处添加了双引号)。您应该将其移到IF块中。

    但是,您可以简单地将"%%D\VIDEO_TS"传递给Handbrake。

    ,而不是更改目录
    FOR /D %%D IN (*) DO (
      IF NOT EXIST "%%D.mp4" (
         echo Encoding %%D ...
         "C:\Program Files\Handbrake\HandBrakeCLI.exe" -i "%%D\VIDEO_TS" -o "%%D.mp4" --preset="High Profile" --x264-preset slow
      )
    )
    

    或者您可以使用pushdpopd

    FOR /D %%D IN (*) DO (
      pushd .    
      IF NOT EXIST "%%D.mp4" (
         cd "%%D"
         echo Encoding %%D ...
         "C:\Program Files\Handbrake\HandBrakeCLI.exe" -i "VIDEO_TS" -o "..\%%D.mp4" --preset="High Profile" --x264-preset slow
      )
      popd
    )