命令提示符替换文件名中间的字符串

Command Prompt Replace a String in the Middle of Filenames

我有一个包含数百个文件的文件夹,格式如下:

20210322 - Filename description.txt
20210321 - Filename description.txt
20210320 - Filename description.txt
20210319 - Filename description.txt
20210318 - Filename description.txt
...

使用 Windows 命令提示符,如何将它们重命名为这种格式:

20210322 Filename description.txt
20210321 Filename description.txt
20210320 Filename description.txt
20210319 Filename description.txt
20210318 Filename description.txt
...

换句话说替换,将“-”替换为“”。

过去,我用过

rename "IMG_*.jpg" "////*.jpg"

删除文件名开头的“IMG_”。我试图做类似的事情,但没有成功:

rename "* - *.txt" "*/ /.txt"

使用支持的 Windows 系统上已有的语言,这很容易。 -replace 将删除 ' - '。如果您对文件将被正确重命名感到满意,请从 Rename-Item 命令中删除 -WhatIf

powershell.exe -NoLogo -NoProfile -Command ^
    "Get-ChildItem -Path '.' -Filter '*.txt' |" ^
        "ForEach-Object {" ^
            "Rename-Item -Path $_.FullName -NewName $($_.Name -replace ' - ',' ') -WhatIf" ^
        "}"

从 PowerShell 控制台或作为 .ps1 脚本 运行 时更容易。

Get-ChildItem -Path '.' -Filter '*.txt' |
    ForEach-Object {
        Rename-Item -Path $_.FullName -NewName $($_.Name -replace ' - ',' ') -WhatIf
    }

要获得“一行代码”,请将上面的第一个代码示例放入一个文件中,例如保存在 PATH 变量中提到的目录中的 Do-Rename.bat 文件中。然后使用命令如:

Do-Rename

我找到了一个更适合我的解决方案。一行,不需要批处理文件。使用 Windows 功率 Shell,输入:

Get-ChildItem -Recurse | ` Where-Object { $_.Name -match " - " } | ` Rename-Item -NewName { $_.Name -replace " - ", " " }

以上命令将替换所有文件名中的给定文本,包括子文件夹和子文件(递归)。

希望对大家有所帮助。