1

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

3 回答 3

3

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

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

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

$files |Rename-Item -NewName {'{0}.txt' -f ($_.Name -split '_')[-2]}  # grab 2nd last word
于 2019-11-19T16:59:38.613 回答
0

怎么样:

dir *.txt | 
  rename-item -newname { $null,$base,$null = $_.basename -split '_'; "$base.txt" } -whatif
于 2019-11-19T17:15:07.693 回答
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"

}
于 2019-11-19T18:54:45.783 回答