需要Windows cmd命令将文件重命名为没有版本号的名称,例如:
filename.exa.1 => filename.exa
filename_a.exb.23 => filename_a.exb
filename_b.exc.4567 => filename_b.exc
文件名的字符数是可变的,主扩展名始终为3个字符。
我曾经有一个Solaris脚本“ stripv”来完成此任务。我可以在目录中输入“ stripv *”,并获得一组非常干净的非版本化文件。如果该命令由于存在多个版本而导致文件名重复,那么它将完全跳过该操作。
TIA
答案 0 :(得分:0)
不知道如何在CMD中执行此操作,但这是一些适合您的Powershell:
# Quick way to get an array of filenames. You could also create a proper array,
# or read each line into an array from a file.
$filepaths = @"
C:\full\path\to\filename.exa.1
C:\full\path\to\filename_a.exb.23
\\server\share\path\to\filename_b.exc.4567
"@ -Split "`n"
# For each path in $filepaths
$filepaths | Foreach-Object {
$path = $_
# Split-Path -Leaf gets only the filename
# -Replace expression just means to match on the ".number" at the end of the
# filename and replace it with an empty string (effectively removing it)
$newFilename = ( Split-Path -Leaf $path ) -Replace '\.\d+$', ''
# Warning output
Write-Warning "Renaming '${path}' to '${newFilename}'"
# Rename the file to the new name
Rename-Item -Path $path -NewName $newFilename
}
基本上,此代码创建文件的完整路径数组。对于每个路径,它将从完整路径中删除文件名,并在末尾用任何内容替换.number
模式,这会将其从文件名中删除。现在我们有了新的文件名,我们使用Rename-Item
将文件重命名为新名称。
答案 1 :(得分:0)
为此脚本块的$Folder
变量提供文件夹名称,它将枚举该文件夹中的项目,找到文件名中的最后'.'
个字符,并将其重命名为'.'
。
例如:Filename.123.wrcrw.txt.123
将重命名为Filename.123.wrcrw.txt
,否则您的文件将从最后的'.'
开始丢失多余的字符。如果该文件的新名称已经存在,它将写警告,指出它无法重命名该文件,然后继续尝试。
$Folder = "C:\ProgramData\Temp"
Get-ChildItem -Path $Folder | Foreach {
$NewName = $_.Name.Substring(0,$_.Name.LastIndexOf('.'))
IF (!(Test-Path $Folder\$NewName))
{
Rename-Item $Folder\$_ -NewName $NewName
}
Else
{
Write-Warning "$($_.Name) cannot be renamed, $NewName already exists."
}
}
这应该有效地模仿您为stripv *
描述的行为。可以轻松地将其转换为名称为stripv
的函数,并将其添加到PowerShell配置文件中,以使其在命令行上可以交互地使用,并以与Solaris脚本相同的方式使用。