2017-04-14 46 views
-2

我需要根據目錄名稱(即未知目錄名稱)重命名文件(或將其複製爲新名稱)。如何使用其他目錄名稱重命名未知目錄下的文件

我有許多約會的文件夾和子目錄。在每個子目錄下,有一個名爲index.txt的文件。該txt文件需要重命名或複製到它上面的目錄名稱。每個子目錄的名稱都是已知的,以便在必要時可以在腳本中使用。

例如:

>Tree C:\Test /f 
C:\TEST 
├───20170414124512 
│ ├───Directory1 
│ │  index.txt 
│ │ 
│ ├───Directory2 
│ │  index.txt 
│ │ 
│ └───Directory3 
│   index.txt 
│ 
└───20170414134345 
    ├───Directory1 
    │  index.txt 
    │ 
    ├───Directory2 
    │  index.txt 
    │ 
    └───Directory3 
      index.txt 

我需要的最終結果是這樣的:

  • C:\測試\ 20170414124512 \ directory1中\ Directory1.txt
  • Ç :\ Test \ 20170414124512 \ Directory2 \ Directory2.txt
  • C:\ Test \ 20170414124512 \ Directory3 \ Directo ry3.txt
  • C:\測試\ 20170414134345 \ directory1中\ Directory1.txt
  • C:\測試\ 20170414134345 \ Directory2 \ Directory2.txt
  • C:\測試\ 20170414134345 \ directory3目錄\ Directory3.txt

**對不起,我應該包括我試過的東西。這是我試過的,它不起作用。

爲/ d/R 「C:\測試」 %%一箇中(*)做回波仁 「%%一個\ index.txt」 「%%〜Na.txt」

+1

你到目前爲止嘗試過什麼,你有什麼問題?提示:查看['for'命令](http://ss64.com/nt/for.html)並學習使用它的'/ D'選項以及'〜'修飾符;在命令提示符窗口中鍵入'for /?'並閱讀幫助文本。起點:(for「/ D %% J in(」C:\ Test \ *「)do for/D %% I in(」%%〜fJ \ *「)do ren」%%〜fI \ index.txt 「」%%〜nI.txt「' – aschipfl

回答

0

爲了避免嘗試重新命名不存在的文件index.txt產生額外如果到aschipl的建議應該做的:

@Echo off 
for /D %%J in ("C:\Test\*" 
) do for /D %%I in ("%%~fJ\*" 
) do (
    If exist "%%~fI\index.txt" Echo ren "%%~fI\index.txt" "%%~nI.txt" 
) 

如果輸出看起來不錯,去除回聲在最後一行:

ren "C:\Test\20170414124512\Directory1\index.txt" "Directory1.txt" 
ren "C:\Test\20170414124512\Directory2\index.txt" "Directory2.txt" 
ren "C:\Test\20170414124512\Directory3\index.txt" "Directory3.txt" 
ren "C:\Test\20170414134345\Directory1\index.txt" "Directory1.txt" 
ren "C:\Test\20170414134345\Directory2\index.txt" "Directory2.txt" 
ren "C:\Test\20170414134345\Directory3\index.txt" "Directory3.txt" 
0

像這樣應做到這一點。 如果你想要的話,你也可以將它移動到別的地方。 這是一個PowerShell腳本。

foreach($folder in Get-ChildItem -Path "C:\Temp" -Recurse) 
{ 
    if ($folder -is [System.IO.DirectoryInfo]) 
    { 
     if($folder.Name -contains "Your Foldername") 
     { 
      $path = $folder.FullName 
      Rename-Item "$path\index.txt" -NewName "Newname.txt" 
     } 
    } 
} 
0
FOR /f "delims=" %%a IN (
'dir /b /s /a-d "u:\sourcedir\index.txt" ' 
) DO (
FOR /f "delims=" %%r IN ("%%~dpa.") DO ECHO REN "%%a" "%%~nr%%~xa" 
) 

如果您願意,所有這些都可以在一行上。我使用u:\sourcedir\作爲測試目錄,並且爲了測試目的,所需的REN命令僅僅是ECHO驗證命令是否正確後,將ECHO REN更改爲REN以實際重命名文件。

請注意,直接從提示符執行以及作爲批處理文件的行是不同的。 metavariable(循環控制變量)%%x必須在批處理行中引用爲%%x,如果從命令提示符執行,則引用%x。由於從提示中重複執行包含for的行(創建批處理文件比較容易)是毫無意義的,所以我發佈了批處理文件版本。用戶有責任根據需要調整直接提示。

在內存中,創建/b基本形式/s掃描子目錄/a-d的目錄清單,但不提供匹配index.txt文件數據夾。將每個名稱分配到%%a(「delims =」確保通過關閉默認分隔符來分配整個行)。通過將%%a%%~dpa)的驅動器和路徑部分重複進行解析操作,使其看起來像文件名,通過添加.來檢測目錄名。然後使用%%r的「名稱部分」和%%a的擴展部分(我們實際知道的是.txt,因爲這就是使用名稱(全部爲%%a)和名稱(僅限名稱和擴展名)構造ren命令在dir命令中指定) - 所有整齊地用引號括起來,這樣ren可以應付語法上的分隔符,如空間出現在正在玩弄的名字的任何地方。