重命名具有不同名称的多个文件

时间:2019-11-19 16:43:32

标签: powershell rename-item-cmdlet

我绝对不是程序员,并且是使用Powershell的新手,但是我的任务是为我们FTP的日常文件设置一些批处理导出过程。我需要提出一个脚本,该脚本将使用更改的文件名并将它们在同一目录中更改为新名称;

示例:文件将如下所示(YYYYMMDD将成为更改变量)

YYYYMMDD_Share_Support.txt
YYYYMMDD_Person_Support.txt

我们需要将它们从上面剥离到:

Share.txt
Person.txt

依此类推。

我已经找到了使之工作的方法,但是只能根据需要一次对一个文件使用特定名称,而不能每天更改名称。

到目前为止,我正在使用:

Get-ChildItem -Filter *.txt

Dir | %{Rename-Item $_ -NewName ("NEWFILENAME.txt" -f $nr++)}

3 个答案:

答案 0 :(得分:3)

您可以在管道绑定的脚本块中使用正则表达式-replace运算符:

$files = Get-ChildItem -filter *.txt 
$files |Rename-Item -NewName { $_.Name -replace '^\d{8}_(.*)_Support\.txt$', '$1.txt' }

suggested by TheIncorrigible1一样,如果您知道所需单词的相对位置,也可以使用-split

$files |Rename-Item -NewName {'{0}.txt' -f ($_.Name -split '_')[-2]}  # grab 2nd last word

答案 1 :(得分:0)

怎么样:

dir *.txt | 
  rename-item -newname { $null,$base,$null = $_.basename -split '_'; "$base.txt" } -whatif

答案 2 :(得分:0)

可能是答案的较长版本。 @ TheIncorrigible1

提到的替代方法
$logDir = "D:\Satish\TestFolders"
cd $logDir

$files = ls

foreach ($file in $files){
$fileSplit=($file.ToString()).split("_")


ren $file "$($fileSplit[1]).txt"

}
  

对于Share.txt到YYYYMMDD_Share_Support.txt

$logDir = "D:\Satish\TestFolders"
cd $logDir

$files = ls

$date = Get-Date -Format "yyyyMMdd"

foreach ($file in $files){
$fileSplit=($file.ToString()).split(".")


ren $file "$($date)_$($fileSplit[0])_Support.txt"

}