将文本文件名替换为文件中的字符串参数

时间:2015-11-10 23:16:34

标签: powershell powershell-v2.0 powershell-v3.0

Windows 7文件夹中有近500个.txt文件。 所有都命名为01.txt,02.txt,依此类推。 企业希望根据文件中的标题文本重命名文件。

例如:
如果有一个'休斯顿'文件里面的文本,应保存为Houston.txt
如果有一个波士顿'文件内的文本,应该保存为Boston.txt,其中1933年是报告的年份。

一种方式是手动......但我尝试过,需要付出很多努力。 有没有办法可以使用PowerShell 3.0完成,也可以是Windows批处理。

1 个答案:

答案 0 :(得分:0)

好的,所以这就是我收集的内容...... 您有文本文件被视为CSV,因此例如您的01.txt可能包含以下数据:

Houston,Pants,Tacos
Chicken,Fire,Fun for everyone
Oranges,Pizza,Cows

您希望为目录中的每个文本文件(以及Get-ChildItem的子目录)执行-Recurse,并将其设置为变量:

$Files = Get-ChildItem "MyDirectory\*.txt" -Recurse

接下来,我为文件执行ForEach

ForEach($f in $Files){

根据文件名获取每个文件的内容,取-split标志抓取第一个逗号的所有内容,只选择第一行:

$a = (Get-Content $f.fullname) -split "," | select -first 1

我设置了一个新变量来从第一个变量获取数据并追加文件扩展名" .txt"在你的情况下:

$b = $a + ".txt"

然后告诉它将文件从其当前名称重命名为变量$b的值并使用}关闭循环:

Rename-Item $f.FullName $b -Force
}

容易腻,柠檬挤压。

根据以下评论,您的文本文件如下所示:

The orange fox jumped over the cat having 200 bucks.
The cat went after the fox and reached city Boston.
There the Fox and Cat again became friends and had breakfast.

这意味着第二行的最后一个单词将始终是您想要的文件名,并且在单词的末尾有一个句点。如果是这种情况,请更改:

$a = (Get-Content $f.fullname) -split "," | select -first 1
$b = $a + ".txt"

要:

$a = (Get-Content $f.fullname) | select -first 1 -skip 1
$b = $a.Split()[-1] + "txt"

这会将变量$a设置为文本文件的第二行(第一个LINEBREAK之后的第一行[一个{ENTER}字符])。在这种情况下,它是"波士顿"和期间角色"。"所以变量值现在是"波士顿。"。然后,它会将变量$b设置为$a的值,并附加字母" txt"给你文件扩展名,使你的文件名" Boston.txt"。

相关问题