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



我不是一名程序员,对使用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++)}

您可以在绑定到管道的脚本块中使用regex-replace运算符:

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

正如TheIncorrible1所建议的,如果你知道你需要的单词的相对位置,你也可以使用-split:

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

怎么样:

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

可能是答案的较长版本。@TheIncorrible1 提到的替代方案

$logDir = "D:SatishTestFolders"
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:SatishTestFolders"
cd $logDir
$files = ls
$date = Get-Date -Format "yyyyMMdd"
foreach ($file in $files){
$fileSplit=($file.ToString()).split(".")

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

相关内容

  • 没有找到相关文章

最新更新