批处理 - mkdir给出"文件名,目录名或卷语法不正确"在循环中

时间:2015-02-06 15:49:52

标签: windows batch-file

我正在尝试制作用于转换和复制文件的批处理文件,同时保持子文件夹的层次结构。

到目前为止我的代码(麻烦的部分)是:

cd "%inputdir%"
setlocal disableDelayedExpansion
for /f "delims=" %%A in ('forfiles /s /m *.tga /c "cmd /c echo @relpath"') do (
  set "file=%%~A"
  setlocal enableDelayedExpansion
  echo !file:~1,-4!
  echo %inputdir%!file:~1!
  set filenametmp=%outputdir%!file:~1,-4!.paa
  echo %outputdir%!file:~1,-4!.paa

  For %%A in ("%filenametmp%") do (
    Set foldertmp=%%~dpA
  )

  IF NOT EXIST "%foldertmp%" (
  mkdir "%foldertmp%"
  ) 
  endlocal
)

问题是创建文件夹的部分。设置文件名tmp下的回显给出“C:\ Users \ Asheara \ Desktop \ cicik \ BI \ M14 \ data \ M14_body_CO.paa”,这是正确的

对于它下面应该得到路径的一个目录部分(“C:\ Users \ Asheara \ Desktop \ cicik \ BI \ M14 \ data”),如果我这样做它可以工作:

For %%A in ("C:\Users\Asheara\Desktop\cicik\BI\M14\data\M14_body_CO.paa") do (
    Set foldertmp=%%~dpA
)
在循环之前

(在我之前粘贴的代码之上)。但是在这个循环中,它总是抛出这个错误,尽管for本身和输入数据是相同的。

有谁知道如何处理这个问题? 感谢

编辑: 这是工作结果:

cd "%inputdir%"
setlocal disableDelayedExpansion
for /f "delims=" %%A in ('forfiles /s /m *.tga /c "cmd /c echo @relpath"') do (
  set "file=%%~A"
  setlocal enableDelayedExpansion
  set filenametmp=%outputdir%!file:~1,-4!.paa

  setlocal enableDelayedExpansion
  For %%A in ("!filenametmp!") do (
    Set foldertmp=%%~dpA
  )

  setlocal enableDelayedExpansion
  IF NOT EXIST "!foldertmp!" (
    mkdir "!foldertmp!"
  )
  endlocal
)

1 个答案:

答案 0 :(得分:1)

您需要使用setlocal EnableDelayedExpansion启用延迟展开,然后将%foldertmp%更改为!foldertmp!