【发布时间】: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