2009-11-25 29 views
58

我有一個批處理文件,可以自動將一堆文件從一個地方複製到另一個地方,然後再回來。唯一的事情就是它可以幫助我,我不小心從命令緩衝區中選擇了這個命令,並且批量覆蓋未被改變的更改。如何在Windows批處理文件中創建「你確定」提示?

我需要什麼代碼才能讓我的.bat文件聲明「你確定」,並讓我在運行文件的其餘部分之前鍵入「y」?如果鍵入任何「y」但它應該退出該行的執行。

編輯 11月27日 好吧我標記了這個沒有回答,因爲我仍然無法弄清楚。當我打電話「退出」時它關閉了cmd.exe,這不是我想要的。所有這些因爲Windows執行的命令緩衝區錯誤[與我至少使用的不同] [

回答

106

你想要的東西,如:

@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 
+1

我要添加的唯一東西是在提示之前增加一個'SET AREYOUSURE = N',以便清除選擇,如果您已經在該命令窗口之前運行過腳本。沒有它,默認將保持先前選擇的選擇。 – isapir 2014-12-26 21:05:01

+2

@Igal我很確定'setlocal'和'endlocal'應該處理這個問題。在'endlocal'之後'%AREYOUSURE%'不再存在了。 – 2015-06-12 20:30:04

+1

@dudeprgm你可能是對的。我認爲我錯過了我的代碼。 – isapir 2015-06-14 05:34:10

21

嘗試CHOICE command,例如,

CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel." 
+5

雖然這是比較新的。它在1993年或1994年被添加到MS-DOS 6中,所以它可能不適用於所有實現。 2010-03-07 18:10:12

+2

我在Windows 8上試過它,我可以確認它的工作原理。 – Genhis 2015-07-15 22:14:21

+3

如何在這裏實際使用選擇的例子http://www.computerhope.com/issues/ch001674.htm – 2016-11-04 08:35:19

11

choice命令在任何地方都不可用。對於較新的Windows版本中,set命令有/p選項,您可以獲取用戶輸入

SET /P variable=[promptString] 

看到set /?更多信息

+0

+1選擇甚至不能在Windows 2000工作 – YOU 2009-11-25 04:45:47

+0

...比接受的更具洞察力,但我們顯然活着在緊急的時候。 – Wolf 2017-02-03 10:23:12

0

這裏更容易一點:

@echo off 
set /p var=Are You Sure?[Y/N]: 
if %var%== Y goto ... 
if not %var%== Y exit 

@echo off 
echo Are You Sure?[Y/N] 
choice /c YN 
if %errorlevel%== Y goto ... 
if %errorlevel%== N exit 
+0

'if%errorlevel%== Y' ??我錯過了什麼? Y發出你想要發生的命令之後的 – Stephan 2017-04-16 18:46:37

+0

。這就是... :) – 2017-04-24 14:16:08

+0

我的意思是:'%errorlevel%'總是一個整數值。請參閱[這裏](https://ss64.com/nt/choice.html)以獲取包括示例的文檔。 – Stephan 2017-04-24 14:31:28

0

如果希望批處理程序退出到提示符而不關閉提示(A.K.A cmd.exe),則可以使用「exit/b」。

這可能有幫助。

set /p _sure="Are you sure?" 
::The underscore is used to ensure that "sure" is not an enviroment 
::varible 
if /I NOT "_sure"=="y" (
::the /I makes it so you can 
exit /b 
) else (
::Any other modifications... 
) 

或者,如果你不希望使用盡可能多的行...

Set /p _sure="Are you sure?" 
if /I NOT "_sure"=="y" exit /b 
::Any other modifications and commands. 

希望這有助於...

相關問題