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

问题描述:

我正在尝试使批文件转换和复制文件,同时保持子文件夹的层次结构。批处理-mkdir在循环中给出“文件名,目录名称或卷语法不正确”

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

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:\用户\ Asheara \桌面\ cicik \ BI \ M14 \数据“)和它的作品,如果我这样做:

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

循环之前(上面的代码,我之前粘贴)。但是在这个循环内部,它总是会抛出这个错误,尽管对于它自己和输入数据是相同的。

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

编辑: 这是工作的结果:

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!

+0

还需要更改'%filenametmp%'为'!filenametmp!' – 2015-02-06 16:15:29

+0

非常感谢,这有所帮助。我会用最终结果更新问题:)如果您不介意,我是否也可以问如何让它搜索更多的文件类型?我用[这个答案](http://*.com/questions/11719347/using-forfiles-with-multiple-file-types-for-search-mask)和第一个看起来像'for/f“delims =” %% A in('for %% G in(.tga,.png)do'forfiles/s/m * %% G/c“cmd/c echo @relpath”'')do(...'and that说:“系统找不到%G的文件...” – Asheara 2015-02-06 18:08:51

+0

@Asheara你应该创建一个新的问题来问这个问题 – aphoria 2015-02-06 18:27:09