重命名文件夹的批处理文件会创建新文件夹

重命名文件夹的批处理文件会创建新文件夹

由于我有所有文件的多个备份副本,因此我使用以下批处理文件来重命名文件,这样我就不必进入每个驱动器/文件夹手动重命名文件。批处理文件可以很好地重命名文件。但是,在重命名文件夹时,有时它可以正常工作,有时它会生成另一个具有正确名称的文件夹。发生这种情况时,并不是每个文件夹都需要重命名,只有部分文件夹需要重命名。

批处理文件有问题吗?如何纠正?

chcp 65001

if exist C:\rename-all-4.txt del c:\rename-all-4.txt

SETLOCAL EnableDelayedExpansion

(for /f "tokens=1,2 delims=;" %%A in ('"TYPE C:\RENAME-ALL.txt"') do ( 
    echo %%A | find /i "\" 
    if errorlevel 1 (
        RENAME "D:\!mypath!%%A" "%%B" 
        RENAME "E:\!mypath!%%A" "%%B" 
        RENAME "\\PC1\D\!mypath!%%A" "%%B" 
        RENAME "\\PC1\E\!mypath!%%A" "%%B" 
 )  ELSE (
        echo "found pattern"
        echo %%A
        set mypath=%%A
        echo mypath is !mypath!
 )
)
) >> C:\RENAME-ALL-4.txt 2>&1
endlocal

CD /D C:\

以下是缩短的输入文件。运行批处理文件后,原文件夹(中国人民银行_files)仍然存在,同时还存在一个新文件夹(中國人民銀行_files)。

News\
中国人民银行_files;中國人民銀行_files

答案1

@echo off

setlocal enabledelayedexpansion
cd /d "%~dp0" & >nul chcp 65001
2>nul del/q /f .\rename-all-4.txt 

>> .\rename-all-4.txt 2>&1 ( 
    for /f tokens^=1-2^delims^=^; %%a in ('
    type c:\rename-all.txt')do echo=%%~a|>nul findstr /e \ && (
         echo="found pattern" && echo=%%~a
         set "mypath=%%~a" && call echo=mypath is !mypath!
        ) || (
         ren "d:\!mypath!%%~a" "%%~b"
         ren "e:\!mypath!%%~a" "%%~b"
         ren "\\pc1\d\!mypath!%%~a" "%%~b"
         ren "\\pc1\e\!mypath!%%~a" "%%~b"
    )) 

endlocal && CD /D C:\

  • 这是一个错误的语法:

if errorlevel  1 ... 
if errorlevel ????  1 ...

    errorlevel   equal integer :: 
if !errorlevel!  equ   1 ...
if %errorlevel%  equ   1 ...

另外,尝试将errorlevel条件替换为运算符&&||




答案2

SETLOCAL EnableDelayedExpansion

(for /f "tokens=1,2 delims=;" %%A in ('"TYPE C:\RENAME-ALL.txt"') do if "%%B"=="" (
  echo "found pattern"
  echo %%A
  set  "mypath=%%A"
  echo mypath is !mypath!
 ) ELSE (
 RENAME "D:\!mypath!%%A" "%%B" 
RENAME "E:\!mypath!%%A" "%%B" 
RENAME "\\USER-PC1\D\!mypath!%%A" "%%B" 
RENAME "\\USER-PC1\E\!mypath!%%A" "%%B" 
 )
) >> C:\RENAME-ALL-4.txt 2>&1
endlocal

相关内容