2012-08-05 216 views
3

使用Powershell,我想通过使用文件所在文件夹的名称来重命名文件夹中的文件。所以在我的C:\ temp目录中,有3个文件夹名为'aaa ','bbb'和'ccc'。在每个这些文件夹中,有3个文件称为doc1.txt,doc2.txt和doc3.txt。我想所有9个.txt文件重命名为文件夹名+文件名,这样他们将被重新命名为以下几点:使用文件夹名称在powershell中重命名文件

aaadoc1.txt 
aaadoc2.txt 
aaadoc3.txt 
bbbdoc1.txt 
bbbdoc2.txt 
bbbdoc3.txt 
cccdoc1.txt 
cccdoc2.txt 
cccdoc3.txt 

请任何人都可以点我如何处理这个正确的方向?

回答

9

这将重命名这些文件,并把下划线(“_”)的文件夹名和文件名之间:

Get-ChildItem C:\temp -Filter *.txt -Recurse | Rename-Item -NewName { $_.Directory.Name+'_'+$_.Name} 
+0

谢谢Shay!工作一种享受,它给了我其他我需要学习的东西! – user1577314 2012-08-05 15:43:33

+0

你会如何达到同样的子目录? 也就是Dir1_Dir2_filename? – Ash 2015-07-23 03:15:05

1

[IO.Directory]::GetCurrentDirectory().split('\\')[-1]会给你你是在目录中。

1

试试这个

$dirname = resolve-path . | split-path -leaf 
Get-ChildItem -Name | Foreach { Rename-Item $_ ($dirname + $_) } 

要小心,不要破坏/删除任何文件。没有保证。

+0

感谢约翰!它有点奏效,但有一些意想不到的副作用! txt文件被重命名,但文件夹也被重命名为tempaaa tempbbb tempccc。这实际上并不会引起我的问​​题,但如果您只是想重命名文件而不是文件夹,那么您将被拧紧。有趣的是,你的方法与另一种方法有所不同 - 看起来像使用Powershell有许多方法可以为猫皮!感谢您的帮助 – user1577314 2012-08-05 15:47:20

相关问题