批量重命名:跳过已经重命名的文件

Batch rename: skipping already renamed files

所以在最近的另一个问题中,我需要通过将 .ab 添加到文件名中来找到批量重命名文件的解决方案。我成功地做到了这一点,但现在我面临着一个不同的问题。每次我 运行 批处理文件时,它都会将 .ab 附加到所有文件,即使是那些已经重命名的文件。我尝试通过以下方式解决问题,但不起作用。

rem @echo off

FOR /R "C:\Users\" %%G in (*.txt) DO (
  %%G|findstr /i /L ".ab">nul
  IF errorlevel 1 (
    REN "%%G" "%%~nG.ab.txt"
  ) ELSE (
    skip %%G
  )
)

pause

基本上我需要检查文件名中是否已经包含“.ab”,然后根据结果跳过或添加 .ab。如果有任何帮助,我将不胜感激。

使用 For /F 循环,而不是 For /R。此外,不要使用 Dir 命令及其 /S 选项,(将输出以 .txt* 结尾的项目),使用 Where 与其 /R 选项相反,(将输出以 .txt 结尾的项目).

单行 示例,(不包括以 不包含 .ab 结尾的那些基本名称):

@For /F "Delims=" %%G In ('^""%__AppDir__%where.exe" /R "C:\Users" "*.txt" 2^>NUL^|"%__AppDir__%findstr.exe" /IV "\.ab\.txt$"^"')Do @Ren "%%G" "%%~nG.ab%%~xG"

不要忘记更改 C:\Users and/or .txtab as/if 的两个实例。