RENAME 函数不在批处理脚本中重命名

RENAME function not renaming in batch script

编辑:我更新了这个 post 以包含整个脚本。

编辑:虽然不理想,但这意味着软件制造公司提供的修复程序的自动化。

我有一个批处理文件,我是 运行 管理员。

我是运行根据用户输入的文件系统生成的批处理文件

第一个命令重命名文件。

如果我在提升的命令提示符下单独执行此命令,它会重命名文件。

当我将命令嵌套在 IF 语句中时,它不会重命名文件。

我已经注释掉了所有其他行,以便在用户输入“1”时简单地重命名文件。

我已经尝试将文件路径和文件分别封装在引号中,我不需要,但仍然没有得到它来重命名文件。

我是运行批处理脚本管理员。

@echo off
setlocal EnableDelayedExpansion

if "%$ecbId%" == "" (
    echo Welcome to the ADaPT 
    echo Choose '1' for 32 bit
    echo Choose '2' for 64 bit
    echo Type anything else to abort.
    echo.
    set "UserChoice=abort"
    set /P "UserChoice=Type your choice: "
    if "!UserChoice!"=="1" (
        echo Executing 32 bit sequence...       
        echo Regsvr32.exe /u C:\Windows\System32\MSCOMCTL.OCX
        echo REN C:\Windows\System32\MSCOMCTL.OCX MSCOMCTL.bak
        xcopy C:\install\MSCOMCTL.OCX C:\Windows\System32 folder
        Regsvr32.exe C:\Windows\System32\MSCOMCTL.OCX
        Regsvr32.exe /u C:\Windows\System32\MSCOMCTL.OCX
        del "C:\Windows\System32\ MSCOMCTL.OCX"
        echo REN "C:\Windows\System32\MSCOMCTL.bak" "MSCOMCTL.OCX"
        Recho Regsvr32.exe C:\Windows\System32\MSCOMCTL.OCX
        shutdown.exe /r /t 00
    )

    if "!UserChoice!"=="2" (
        echo Regsvr32.exe /u C:\Windows\SYSWOW64\MSCOMCTL.OCX
        echo REN "C:\Windows\SYSWOW64\MSCOMCTL.OCX" "MSCOMCTL.bak"
        xcopy C:\install\MSCOMCTL.OCX C:\Windows\SYSWOW64 folder
        Regsvr32.exe C:\Windows\SYSWOW64\MSCOMCTL.OCX
        Regsvr32.exe /u C:\Windows\SYSWOW64\MSCOMCTL.OCX
        del "C:\Windows\SYSWOW64\ MSCOMCTL.OCX"
        echo REN "C:\Windows\SYSWOW64\MSCOMCTL.bak" "MSCOMCTL.OCX"
        echo Regsvr32.exe C:\Windows\SYSWOW64\MSCOMCTL.OCX
        REM... shutdown.exe /r /t 00
    )
    if not "!UserChoice!"=="1" (
        echo toto3
        if not "!UserChoice!"=="2" (
            echo toto4
            echo Unknown input ... Aborting script
            endlocal
            exit /B 400
        )
    )
)
endlocal

我已经简化了你的整个脚本结构,以便不需要括号块,或者不需要延迟扩展:

@Echo Off

If Defined $ecbId GoTo :EOF

Echo Welcome to the ADaPT

Choice /C CQ /M "Continue or Quit"
If ErrorLevel 2 GoTo :EOF

Set "Dest=TEM32"
Set PROCESSOR_ARCHITE|Find "64">Nul&&(Set Dest=WOW64)
Set "Dest=%SYSTEMROOT%\SYS%Dest%"

Echo Executing sequence . . .

RegSvr32 /U "%Dest%\MSCOMCTL.OCX"

Rem To backup and replace MSCOMCTL.OCX:
Rem  Uncomment the next three unRemarked lines
Rem   and comment the next three unRemarked lines below them.
::Del /A /F "MSCOMCTL.bak" 2>Nul
::Ren "%Dest%\MSCOMCTL.OCX" "MSCOMCTL.bak"
::XCopy "C:\install\MSCOMCTL.OCX" "%Dest%"
Rem To recover MSCOMCTL.OCX from the backup:
Rem  Comment the next three unRemarked lines
Rem   and uncomment the previous three unRemarked lines above them.
If Not Exist "MSCOMCTL.bak" RegSvr32 "%Dest%\MSCOMCTL.OCX" & GoTo :EOF
Del /A /F "%Dest%\MSCOMCTL.OCX"
Ren "%Dest%\MSCOMCTL.bak" "MSCOMCTL.OCX"

RegSvr32 "%Dest%\MSCOMCTL.OCX"
ShutDown /R /T 0 /D P:2:4

注意:
删除行3和空行4可能是安全的,我离开了它们只是因为没有提供关于 %$ecbId% 变量值比较 .
的目的的解释我已经添加了 Remarks 用于切换备份脚本或恢复方法,但没有故意改变你的任何命令序列,(但是我添加了 /A/F 选项和 Del,以防万一,并包括/D 选项和 ShutDown 以确保日志将其显示为计划的关闭事件).