【问题标题】:What can make pause stop working in a batch file?什么可以使暂停在批处理文件中停止工作?
【发布时间】:2014-06-16 08:25:46
【问题描述】:

我为一个“暂停”语句无法正常工作而发疯,这是我为清除 USB 驱动器中的病毒而制作的批处理文件,这种病毒似乎在我工作的地方很普遍。

我从研究中发现,当你调用另一个批处理文件并且它失败或有退出语句时,可能会出现此类问题,并使用“调用”来防止它发生。

问题是,批处理文件一直在运行,它不会停止,它工作得很好,但它只是忽略了除了第一次暂停发生之外的所有内容。

另一件事是,当我关闭@echo 时,无论如何它都不起作用。如果我 REM @echo off 并从 cmd 运行批处理,第一次运行时暂停将失败,然后如果我再运行一次,那么暂停将正常工作。

尽管在互联网上寻找解决方案,但我似乎无法理解为什么会发生这种情况。

我留下虚荣的标题/签名只是因为它可能是原因之一,但我确实尝试过没有它,但它仍然无法工作。

代码如下:

@echo off
mode con: cols=80 lines=30
title USBFix by Tamok

:Signature
echo " __    __       _______..______    _______  __  ___   ___"
echo "|  |  |  |     /       ||   _  \  |   ____||  | \  \ /  /"
echo "|  |  |  |    |   (----`|  |_)  | |  |__   |  |  \  V  / "
echo "|  |  |  |     \   \    |   _  <  |   __|  |  |   >   <  "
echo "|  `--'  | .----)   |   |  |_)  | |  |     |  |  /  .  \ "
echo " \______/  |_______/    |______/  |__|     |__| /__/ \__\"
echo Par T. Tamok
echo Version 0.1
echo.
echo.
echo Bienvenue dans le programme de desinfection de clefs USB et volumes externes. Appuyez sur une touche pour continuer.
pause >nul
echo.
echo Voici une liste des disques reconnus sur votre ordinateur.
echo.
call wmic logicaldisk get caption,providername,drivetype,volumename
echo.

:Volume Check
    set /p vName=Veuillez saisir la lettre correspondant au volume que vous souhaitez reparer : 
    if not exist %vName%:\nul goto :failed

:Repair
    echo Appuyez sur une touche pour continuer la reparation ou fermez la fenetre pour quitter.
    pause >nul
    echo Reparation en cours, veuillez patienter...
    call attrib -h -r -s /s /d %vName%:\*.*
    echo Restauration des fichiers caches terminee. Suppression des fichiers infectes...
    if exist %vName%:\iTunesHelper.vbe goto :vbdel
    echo Pas de virus iTunesHelper.vbe.
    :keep1
    if exist %vName%:\*.lnk goto :lnkdel
    echo Pas de fichiers .lnk.
    :keep2
    goto :eof

:failed
    echo Cette lettre ne correspond a aucun volume. Appuyez sur une touche pour quitter.
    goto :eof

:vbdel
    del %vName%:\iTunesHelper.vbe
    echo Virus iTunesHelper.vbe repere.
    echo Suppression de iTunesHelper.vbe OK.
    goto keep1

:lnkdel
    del %vName%:\*.lnk
    echo Suppression des fichiers .lnk OK.
    goto keep2

:eof
    pause >nul
    :exit

【问题讨论】:

  • 似乎没有任何问题。也许尝试 sleep 命令,看看会发生什么(或删除重定向到 nul)
  • 非交互性。如果暂停认为人类无法按下任何键,它就不会暂停。我不知道规则,但启动脚本就是一个例子。虽然查看您的代码,但可能是脚本错误。
  • @Monacraft 我试图删除对 nul 的重定向,但遗憾的是并没有改变任何东西。然后我尝试用超时替换暂停,它起作用了。我不确定为什么超时有效而暂停无效。这是一个很好的解决方法,但我仍然很想知道暂停会发生什么。

标签: windows batch-file cmd


【解决方案1】:

:eof 是 CMD 使用的文件的内部结尾,它将退出例程。

将其更改为不同的标签。

下面是一个演示功能的例子:

@echo off
echo start
goto :eof
echo this will never appear and pause will not function
pause

【讨论】:

  • 感谢您的提示。我通过 :endplz 对其进行了更改,但对暂停问题没有帮助。总是很高兴知道这样的事情!
  • 你是不是也每goto :eof换一次?
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
相关资源
最近更新 更多