批处理 - mkdir 在循环中给出 "filename, directory name or volume syntax is incorrect"
Batch - mkdir gives "filename, directory name or volume syntax is incorrect" in loop
我正在尝试制作用于转换和复制文件的批处理文件,同时保持子文件夹的层次结构。
到目前为止我的代码(麻烦的部分)是:
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 下的 echo 给出 "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
)
您需要使用 setlocal EnableDelayedExpansion
启用延迟扩展,然后将 %foldertmp%
更改为 !foldertmp!
。
我正在尝试制作用于转换和复制文件的批处理文件,同时保持子文件夹的层次结构。
到目前为止我的代码(麻烦的部分)是:
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 下的 echo 给出 "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
)
您需要使用 setlocal EnableDelayedExpansion
启用延迟扩展,然后将 %foldertmp%
更改为 !foldertmp!
。