2015-02-06 28 views
0

我正在嘗試使批文件轉換和複製文件,同時保持子文件夾的層次結構。批處理-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 
) 

回答

1

你需要使用setlocal EnableDelayedExpansion啓用延遲擴展,然後更改%foldertmp%!foldertmp!

+0

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

+0

非常感謝,這有所幫助。我會用最終結果更新問題:)如果您不介意,我是否也可以問如何讓它搜索更多的文件類型?我用[這個答案](http://stackoverflow.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

相關問題