Jos*_*off 81 windows cmd batch-file
我有一个批处理文件,可以自动将一堆文件从一个地方复制到另一个地方,然后返回给我.唯一的事情就是它帮助我,我不小心选择了命令缓冲区中的命令,并大量覆盖未经修改的更改.
我的.bat文件需要什么代码才能让它说"你确定",并让我在运行文件的其余部分之前输入"y"吗?如果输入"y"之外的任何内容,它应该退出该行的执行.
编辑 11月27日好的我再次标记这个未答复,因为我仍然无法弄明白.当我打电话给"退出"时 它关闭cmd.exe这不是我想要的.这一切都是因为Windows实现了命令缓冲区错误[不同于我至少习惯的]
Joe*_*Joe 143
你想要的东西:
@echo off
setlocal
:PROMPT
SET /P AREYOUSURE=Are you sure (Y/[N])?
IF /I "%AREYOUSURE%" NEQ "Y" GOTO END
echo ... rest of file ...
:END
endlocal
Run Code Online (Sandbox Code Playgroud)
Ste*_*owe 27
尝试CHOICE命令,例如
CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."
Run Code Online (Sandbox Code Playgroud)
gho*_*g74 14
该choice命令无处不在.对于较新的Windows版本,该set命令具有/p可以获得用户输入的选项
SET /P variable=[promptString]
Run Code Online (Sandbox Code Playgroud)
了解set /?更多信息
小智 7
这里简单一点:
@echo off
set /p var=Are You Sure?[Y/N]:
if %var%== Y goto ...
if not %var%== Y exit
Run Code Online (Sandbox Code Playgroud)
或者
@echo off
echo Are You Sure?[Y/N]
choice /c YN
if %errorlevel%==1 goto yes
if %errorlevel%==2 goto no
:yes
echo yes
goto :EOF
:no
echo no
Run Code Online (Sandbox Code Playgroud)
Windows命令行上有两个命令可用于用户提示:
/P在所有启用了命令扩展名的Windows NT版本上都可用,并且set是Windows命令处理器的内部命令cmd.exe。该选项/P为一个字符串提示用户是仅与默认情况下启用否则几乎没有批处理文件将继续工作,如今已启用的命令扩展。
choice.exe是位于中的独立控制台应用程序(外部命令)%SystemRoot%\System32。choice.exe可以将Windows Server 2003的Windows Server 2003复制到%SystemRoot%\System32Windows XP计算机上的目录中,以便在Windows XP上使用,就像许多其他命令在Windows XP上默认不可用,但在Windows Server 2003上默认可用。
由于以下原因,最好的选择是使用CHOICE而不是SET / P。
/CCtrl+Cecho Y | call PromptExample.bat使用提示调用批处理文件。cmd由于语法错误而导致退出批处理文件执行,或者执行不包含在批处理文件中的命令编码良好的批处理文件。需要采取一些措施来确保SET / P安全,以防止错误或故意的错误用户输入。这是一个提示示例,其中使用首选的CHOICE,或者在运行Windows的二手计算机上不可用的情况下,设置SET / P。choice.exe
@echo off
echo This is an example for prompting a user.
echo/
if exist "%SystemRoot%\System32\choice.exe" goto UseChoice
setlocal EnableExtensions EnableDelayedExpansion
:UseSetPrompt
set "UserChoice=N"
set /P "UserChoice=Are you sure [Y/N]? "
set "UserChoice=!UserChoice: =!"
if /I "!UserChoice!" == "N" endlocal & goto :EOF
if /I not "!UserChoice!" == "Y" goto UseSetPrompt
endlocal
goto Continue
:UseChoice
%SystemRoot%\System32\choice.exe /C YN /N /M "Are you sure [Y/N]? "
if errorlevel 2 goto :EOF
:Continue
echo So your are sure. Okay, let's go ...
Run Code Online (Sandbox Code Playgroud)
注意:此批处理文件使用的命令扩展名在Windows 95/98 / ME上不可用,command.com而不是cmd.exe用作命令解释器。
set "UserChoice=!UserChoice: =!"添加了命令行,以便可以echo Y | call PromptExample.bat在Windows NT4 / 2000 / XP上调用此批处理文件,并且不需要使用echo Y| call PromptExample.bat。在运行两次字符串比较之前,它将删除从STDIN读取的字符串中的所有空格。
echo Y | call PromptExample.bat导致YSPACE被分配给环境变量UserChoice。这将导致两次处理提示,因为它们"Y "既不区分大小写"N"也不等于"Y"不删除所有空格。因此UserChoice,将Y设置SPACE为值将导致第二次运行提示N,并在第二次执行提示时在批处理文件中将其定义为默认选项,这将导致意外退出批处理文件。是的,安全使用SET / P确实很棘手,不是吗?
有关使用SET / P和CHOICE提示用户从选项列表中进行选择的更多详细信息,请参阅有关如何停止Windows命令解释器退出不正确的用户输入的批处理文件的答案?
更多提示:
UserChoicewith N和Y的值,而是with 和UserChoice包围的值。""N""Y"EQU和NEQ被用于在范围-2147483648比较两个整数2147483647,而不是为了比较两个字符串设计初级。EQU并且NEQ还可以用于字符串比较,但是在无用的尝试将左字符串转换为整数的情况下,使用双引号比较字符串会产生结果。EQU并且NEQ只能与启用的命令扩展一起使用。用于字符串比较的比较运算符是==,not ... ==即使在禁用的命令扩展名下也可以使用command.com,因为MS-DOS和Windows 95/98 / ME已经支持它们。有关IF比较运算符的更多详细信息,请参阅Windows批处理文件中的NEQ,LSS,GTR等符号。goto :EOF需要启用的命令扩展名才能真正退出批处理文件处理。有关更多详细信息,请参见GOTO:EOF返回何处?为了了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
choice /?echo /?endlocal /?goto /?if /?set /?setlocal /?也可以看看:
set "variable=value"在将字符串分配给环境变量时使用语法的原因。if errorlevel X行为和操作细节&。|和STDIN的句柄。SystemRoot。| 归档时间: |
|
| 查看次数: |
96880 次 |
| 最近记录: |