Функция RENAME не переименовывается в пакетном скрипте - PullRequest
0 голосов
/ 06 июня 2018

РЕДАКТИРОВАТЬ: я обновил этот пост, чтобы включить весь сценарий.

РЕДАКТИРОВАТЬ: Хотя это не идеально, это предназначено для автоматизации исправления, предоставленного компанией, которая делает программное обеспечение.

У меня есть командный файл, который я запускаю от имени администратора.

Я запускаю пакетный файл на основе файловой системы, введенной пользователем.

Одна из первых команд переименовывает файл.

Если я выполняю эту команду на егоown из привилегированной командной строки переименовывает файл.

Когда я вкладываю команду в оператор 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 голосов
/ 06 июня 2018

Я упростил всю вашу структуру сценария, чтобы не требовать блоков в скобках, или необходимости откладывать расширение :

@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, чтобы журналы отображали его как запланированное отключение) .

...