2017-03-02 63 views
0

我想將我的文件夾名稱附加到子文件夾內的所有可用.txt文件。以下是文件/目錄結構。我需要在Windows BATCH腳本中實現這一點。將文件夾名稱遞歸追加到Windows批處理文件中的文件

C:\源\ Source1的\ 1 \ A.TXT C:\源\ Source1的\ 1 \ b.txt

C:\源\ Source1的\ 2 \ A.TXT C:\源\ Source1的\ 2 \ b.txt

C:\源\源2 \ 3 \ A.TXT C:\源\源2 \ 3 \ b.txt

上述文件應該被重新命名爲象下面:

C:\ Source \ Sour CE1 \ 1 \ 1_a.txt C:\源\ Source1的\ 1 \ 1_b.txt

C:\源\ Source1的\ 2 \ 2_a.txt C:\源\ Source1的\ 2 \ 2_b.txt

C:\來源\源2 \ 3 \ 3_a.txt C:\來源\源2 \ 3 \ 3_b.txt

與之相似,我有源1 ... Source30和每個源目錄下,我將有多個不同號碼的文件夾。我需要重命名這些目錄下的所有文件,並將數字(目錄名稱)附加到文件名中。

遠遠低於是我寫的:

for %%* in (.) do set CurrDirName=%%~nx* 
echo %CurrDirName% 

for /r %%x in (*.txt) do ren "%%x" "%CurrDirName%_%%x" 

有了這個,我能實現它在一個單一的目錄中。我無法讓它遞歸。你能幫我解決這個問題嗎?

+1

這不是DOS,請刪除* DOS *標籤 – samdd

回答

0
@echo OFF 
SETLOCAL EnableExtensions 
for /F "delims=" %%G in ('dir /B /S "C:\Source\*.txt"') do (
    for %%g in ("%%~dpG.") do ECHO rename "%%~fG" "%%~nxg_%%~nxG" 
) 
pause 

其中FOR循環是:

  • %%G循環創建一個靜態列表的.txt文件(遞歸),並
  • %%g得到每一個特定文件的父文件夾。

rename命令僅使用ECHO顯示用於調試目的。要使其可用,請刪除字ECHO(不要早於調試)。

此外,我會考慮檢查一個特定文件是否已改名...

+0

嗨JosefZ,非常感謝。它非常完美! – Santo

相關問題