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

时间:2018-06-06 16:58:30

标签: batch-file rename file-rename

编辑:我已更新此帖子以包含整个脚本。

编辑:虽然不理想,但这是一个由制作软件的公司提供的修复程序的自动化。

我有一个以管理员身份运行的批处理文件。

我正在根据用户输入的文件系统运行批处理文件。

其中一个命令重命名文件。

如果我自己执行此命令,则从提升的命令提示符重命名该文件。

当我将命令嵌套在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

1 个答案:

答案 0 :(得分:0)

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

@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%变量值比较的目的。
我添加了Rem arks用于切换备份或恢复方法的脚本,但没有故意改变任何你的命令序列,(我已将/A/F选项与Del一起添加,以防万一,并将/D选项包含在ShutDown中确保日志将其显示为计划的关闭事件