gpt4 book ai didi

powershell - 选择对象的协助-最后1个和文件名

转载 作者:行者123 更新时间:2023-12-03 00:32:18 25 4
gpt4 key购买 nike

我有以下代码,用于检查目录中的“a_file.xls”,“b_file.xls”,“c_file.xls”等。

根据找到的内容,它将“file.xls”重命名为下一个字母,例如,如果找到了上述三个A,B,C文件,则下次“file.xls”重命名时将变为“d_file.xls”

我需要修改此代码以使用$fileDate = (get-date).ToString('MMdd')在重命名的文件中包含日期戳

这是执行我上面描述的代码。

$fileDate = (get-date).ToString('MMdd')

$dir = "\\server\folder123"

$var = (Get-ChildItem -Path $dir\*_file.xls | Select-Object -Last 1).BaseName.Split('_')[0]

switch ($var) {
"a" {$fileLetter = "b"; break}
"b" {$fileLetter = "c"; break}
"c" {$fileLetter = "d"; break}
"d" {$fileLetter = "e"; break}
"e" {$fileLetter = "f"; break}
"f" {$fileLetter = "g"; break}
"g" {$fileLetter = "h"; break}
"h" {$fileLetter = "i"; break}
"i" {$fileLetter = "j"; break}
"j" {$fileLetter = "k"; break}
"k" {$fileLetter = "l"; break}
"l" {$fileLetter = "m"; break}
"m" {$fileLetter = "n"; break}
"n" {$fileLetter = "o"; break}
"o" {$fileLetter = "p"; break}
"p" {$fileLetter = "q"; break}
"q" {$fileLetter = "r"; break}
"r" {$fileLetter = "s"; break}
"s" {$fileLetter = "t"; break}
"t" {$fileLetter = "u"; break}
"u" {$fileLetter = "v"; break}
"v" {$fileLetter = "w"; break}
"w" {$fileLetter = "x"; break}
"x" {$fileLetter = "y"; break}
"y" {$fileLetter = "z"; break}
default {$fileLetter = "a"; break}
}
$renameFrom = $dir + "\file.xls"
$renameTo = $fileLetter + "_file.xls"

Rename-item $dir\"file.xls" $renameTo

$ renameTo将成为... $renameTo = $fileDate + $fileLetter + "_file.xls"
当我改成这个字母时,我的 Select-Object -Last 1变成了一个问题,它找不到上次使用的字母。相反,它只是找到file.xls作为最后一个,然后尝试重命名为已经存在的文件:示例1120a_file.xls。

我怎样才能解决这个问题?我用正则表达式模式尝试了 | select-string,但是没有用。还使用正则表达式尝试了 | Where-Object,但也不起作用。

关于如何最好地实现这一目标的任何建议?

发生的事情是我正在解压缩包含file.xls的文件,可能有多个文件,有时没有。需要将文件重命名为MMddA_File.xls,MMddB_File.xls,MMddC_File.xls等。

最佳答案

如果您只关心文件名中的字母,而不关心时间戳,则可以尝试以下操作:

# Extract the alphabetically highest letter from the existing file names.
# * -creplace '.*([a-z])_.*', '$1' matches each base name in full,
# and captures a lowercase letter before "_" in the 1st capture group,
# which is then used to replace the input string ('$1'), effectively
# returning only the letter from each base name.
# * The letters are then sorted in descending order, and the first one
# (the highest) is returned.
$fileLetter =
(Get-Item -Path $dir\*_file.xls).BaseName -creplace '.*([a-z])_.*', '$1' |
Sort-Object -Descending |
Select-Object -First 1

# Increment the highest letter by 1 (the next letter, alphabetically).
$fileLetter = if (-not $fileLetter -or $fileLetter.Length -gt 1) {
'a'
} else {
[char] (1 + [char] $fileLetter)
}

$renameFrom = $dir + "\file.xls"
$renameTo = (Get-Date).ToString('MMdd') + $fileLetter + "_file.xls"

Rename-Item $renameFrom $renameTo -WhatIf

注意:上面命令中的 -WhatIf common parameter预览操作。确定操作将执行所需操作后,删除 -WhatIf

关于powershell - 选择对象的协助-最后1个和文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58962783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com