2013-10-29 104 views
2

我一直在尋找使用get-childrenrenameif結合使用的方法,但沒有運氣。如果Powershell中存在另一個文件,則重命名文件

我想搜索文件"trigger.txt"的目錄(測試)的所有子目錄(subdir1,subdir2等),如果文件存在於其中一個子目錄中,我想更改同一子目錄中另一個文件的名稱(changeme.txt_changeme.txt

的改寫:

如果文件存在subdir1\"trigger.txt"改變subdir1\"changename.txt"subdir1\"_changename.txt"

我發現劇本,如果它存在更改文件的名稱和LO好的一個文件,但我無法連接在一起...任何幫助?

回答

2

試試這個:

Get-ChildItem -r trigger.txt | Foreach {Rename-Item (Join-Path $_.DirectoryName changeme.txt) _changeme.txt} 

如果你想簡潔的版本:

ls -r trigger.txt | %{rni (join-path $_.DirectoryName changeme.txt) _changeme.txt} 
+0

這就是我一直在尋找的東西。我用了第二個。這真的幫了我很多努力。我只在腳本的第一行添加了'cd'd:\ test''來在選定的目錄中執行它。 – BimberX

+0

或者您可以指定Get-ChildItem的路徑,例如'Get-ChildItem d:\ test -r trigger.txt | ...' –

+0

好的。很好,我會用它。 – BimberX

0

也許像這樣?

ls -filter trigger.txt -recurse | %{ 
    $original = Join-Path $(Split-Path $_.FullName -Parent) "ChangeMe.txt" 
    $newName = Join-Path $(Split-Path $_.FullName -Parent) "_ChangeMe.txt" 

    if ([IO.File]::Exists($original)) { 
     Write-Host "Renaming $($original)..." 
     ren -Path $original -NewName $newName 
    } 
} 
+0

這個腳本也與屏幕輸出作爲獎金完美的作品,但我躲在ruuunig PS後腳本在運行時會以任何方式將其包裝到VBS腳本中。謝謝! – BimberX

相關問題