CMD“重命名”命令

问题描述

我想从文件夹中的每个“ .pdf”文件删除前21个字符。

我的命令:

rename "*.pdf" "/////////////////////*.pdf"

问题仅在于以下方面:第一个文件重命名两次。删除前42个字符。其他文件已正确重命名(21)。

解决方法

可以执行此命令,但是有许多未发现的陷阱。如果文件名不超过21个字符怎么办?如果NewName复制现有文件名怎么办?

powershell -NoLogo -NoProfile -Command ^
    "Get-ChildItem .\*.pdf |" ^
        "ForEach-Object { Rename-Item -Path $_.FullName -NewName $($_.Name[21..($_.Name.Length)] -join '') -WhatIf }"
,

问题在于,在此过程中,可能会使用新创建的文件来“更新”文件掩码*.pdf
简单的for %%a in (*.pdf)循环也是如此。
要解决此问题,请确保在rename执行之前生成文件列表:

for /f "delims=" %%a in ('dir /b *.pdf') do rename "%%a" "/////////////////////*.pdf"

仅在完成{do部分之后执行...部分,因此不会再次处理新创建/更改的文件。

与lit的答案相同的陷阱适用于:
如果文件名不超过21个字符怎么办?
如果NewName复制现有文件名该怎么办?