在for循环中转义文件名?

时间:2016-07-24 17:40:59

标签: batch-file

所以,我有一个运行名为Kid3的程序的批处理文件。问题是由于Kid3处理来自批处理和文件名的命令的方式,似乎需要以某种方式转义字符。以下是程序尝试对我正在处理的游戏中的某些文件进行操作的示例:

  

未知命令'选择03_A_Hero's_Return.ogg',-h寻求帮助。
  未知命令'选择03_Battle's_Advent.ogg',-h寻求帮助。
  MP4Modify失败了   写文件时出错:
  E:/RPGMaker/Games/AnimaMV/dev/AnimaMV/audio/bgm/03_Battle_Agains_Demon.4a

我不确定为什么写文件的错误发生了,但我猜是因为我需要扫描并修复驱动器错误。但是,这里的主要焦点是顶部的“未知命令”栏。以下是我的代码示例:

@echo off
setlocal enableextensions enabledelayedexpansion
for %%x in (bgm bgs me se) do (
  cd %%x
  for /r %%D in (*.ogg) DO (
    title Fixing sound %%x\"%%~nD.m4a"
    if exist "%%~nD.mp4" (
      if not exist "%%~nD.m4a" (
        ren "%%~nD.mp4" "%%~nD.m4a"
      ) else (
        del "%%~nD.mp4" 
      ) )
    %k3path% -c "select %%~nxD" -c copy -c "select %%~nD.m4a" -c paste
    pause >nul
    )
  cd ..
)

请注意,pause >nul命令仅用于捕获错误消息。我知道我可以将输出重定向到一个文件,我试过但是由于某种原因它没有用。

1 个答案:

答案 0 :(得分:0)

正确的代码:

@echo off
setlocal enableextensions enabledelayedexpansion
for %%x in (bgm bgs me se) do (
  cd %%x
  for /r %%D in (*.ogg) DO (
    title Fixing sound %%x\"%%~nD.m4a"
    if exist "%%~nD.mp4" (
      if not exist "%%~nD.m4a" (
        ren "%%~nD.mp4" "%%~nD.m4a"
      ) else (
        del "%%~nD.mp4" 
      ) )
    %k3path% -c select "%%~nxD" -c copy -c select "%%~nD.m4a" -c paste
    pause >nul
    )
  cd ..
)