Batch file 重命名函数未在批处理脚本中重命名

Batch file 重命名函数未在批处理脚本中重命名,batch-file,rename,file-rename,Batch File,Rename,File Rename,编辑:我已经更新了这篇文章,包含了整个脚本 编辑:虽然不理想,但这意味着该软件生产公司提供的修复程序的自动化 我有一个以管理员身份运行的批处理文件 我正在运行一个基于用户输入的文件系统的批处理文件 第一个命令之一重命名文件 如果我自己从提升的命令提示符执行此命令,它将重命名文件 当我将命令嵌套在IF语句中时,它不会重命名文件 我已经注释掉了所有其他行,以便在用户输入“1”时简单地重命名文件 我已经尝试将文件路径和文件分别封装在引号中,这是我不需要的,但仍然没有让它重命名文件 我以管理员身份运行批

编辑:我已经更新了这篇文章,包含了整个脚本

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

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

我正在运行一个基于用户输入的文件系统的批处理文件

第一个命令之一重命名文件

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

当我将命令嵌套在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关闭
如果定义$ecbId GoTo:EOF
欢迎来到这里
选择/C CQ/M“继续或退出”
如果错误级别2转到:EOF
设置“Dest=TEM32”
设置处理器|查找“64”>Nul&&(设置目标=WOW64)
设置“Dest=%SYSTEMROOT%\SYS%Dest%”
回显执行序列。
RegSvr32/U“%Dest%\MSCOMCTL.OCX”
Rem要备份和替换MSCOMCTL.OCX:
Rem取消注释接下来三行未标记的内容
Rem并注释下面三行未标记的内容。
::Del/A/F“MSCOMCTL.bak”2>Nul
::Ren“%Dest%\MSCOMCTL.OCX”“MSCOMCTL.bak”
::XCopy“C:\install\MSCOMCTL.OCX”“%Dest%”
Rem从备份中恢复MSCOMCTL.OCX:
Rem注释接下来三行未标记的内容
Rem并取消对其上方前三条未标记行的注释。
如果不存在“MSCOMCTL.bak”RegSvr32“%Dest%\MSCOMCTL.OCX”&GoTo:EOF
删除/A/F“%Dest%\MSCOMCTL.OCX”
Ren“%Dest%\MSCOMCTL.bak”“MSCOMCTL.OCX”
RegSvr32“%Dest%\MSCOMCTL.OCX”
停堆/转输0/D压力:2:4

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

您是否在脚本的更高层启用了延迟扩展?您的脚本将只回显它正在重命名文件。如果你想重命名它,你必须删除回显。是的,我已经更新了它……而且你的括号不平衡。我真的希望这个批处理文件永远不会工作,或者至少永远不会在我的一台Windows计算机上执行。如果用这种方法替换Windows公用控件ActiveX控件DLL,我不会对我的Windows计算机的损坏感到高兴。我真的希望Windows文件系统重定向器、Windows文件保护和Windows并排使用可以防止通过这样的方法交换如此重要的系统DLL。幸运的是,这个重要的系统DLL总是在运行的Windows上加载的,因此它不能被像发布的那样的批处理文件重命名或删除。@Marksaulta,您已经在StackOverFlow上呆了足够长的时间,知道如何