我想从文件夹中的每个".pdf“文件中删除前21个字符。
我的命令:
rename "*.pdf" "/////////////////////*.pdf"问题仍然存在:第一个文件被重命名了两次。删除前42个字符。其他文件被正确重命名(21)。
发布于 2020-08-12 22:49:19
此命令可以做到这一点,但有许多未检测到的陷阱。如果文件名不超过21个字符,该怎么办?如果NewName与现有文件名重复,该怎么办?
powershell -NoLogo -NoProfile -Command ^
"Get-ChildItem .\*.pdf |" ^
"ForEach-Object { Rename-Item -Path $_.FullName -NewName $($_.Name[21..($_.Name.Length)] -join '') -WhatIf }"发布于 2020-08-12 23:05:34
问题是,在此过程中,文件掩码*.pdf可能会使用新创建的文件进行“更新”。
对于一个简单的for %%a in (*.pdf)循环也是如此。
要解决此问题,请确保在rename执行其操作之前生成文件列表:
for /f "delims=" %%a in ('dir /b *.pdf') do rename "%%a" "/////////////////////*.pdf"只有在(...)部分完成之后,才会执行do部分,因此不会再次处理新创建/更改的文件。
与lit的答案相同的陷阱也适用:
如果文件名不超过21个字符,该怎么办?
如果NewName与现有文件名重复,该怎么办?
https://stackoverflow.com/questions/63374205
复制相似问题