嗨,我有以下要求 一个批处理文件,通过提示用户从命令行提供输入
,将三个参数作为输入 1)Servername
2)Startdate
3)Enddate
批处理文件应以下面的方式提示。
Prompt Enter servername
Prompt Enter startdate
Prompt Enter enddate
Prompt user to ask if want to add one more set , IF enter Y , repeats the same 3 prompts, else, starts executing execute with single dataset
Ex:-user enters server1 , 20130101 , 20130930
asks to enter Y or N
If Y user enters server2 , 20130101 , 20130930 , asks to enter Y or N
If N, continues with 2 datasets
现在我需要在批处理文件中编写一个for循环,在2个数据集上重复相同的逻辑 任何人都可以告诉我如何实现这一目标。 我正在使用Windows 7机器
答案 0 :(得分:0)
你可能想要一个do循环而不是for循环。我们没有批处理循环,但可以使用Goto命令和Goto:Eof命令模拟一个循环。
所以输入
goto /?
set /?
choice /? (choice was removed from windows in XP or 2000, then upgraded, and put back in Vista)
if /?
call /?
所以(注意测试必须是从高到低的数字)。我也不知道你在问什么,所以我无法弄清楚Y或N究竟应该做些什么。所以N执行另一个代码块,Y重新提出问题。
:StartLoop
set /p sServerName=Enter Server Name
set /p sStartDate=Enter Start date
set /p sEndDate=Enter End date
choice /m "Enter Yes or No."
Rem Testing for N
if errorlevel 2 Goto AnotherBlockOfCode
if errorlevel 1 Goto StartLoop
goto :eof
:AnotherBlockOfCode
echo You chose No
goto :eof
如果你需要Sub而不是跳转使用call命令。
答案 1 :(得分:0)
@echo off
set counter=0
:StartLoop
set /a counter=counter + 1
set /p sServerName%counter%=Enter Server Name
rem set /p sStartDate%counter%=Enter Start date
rem set /p sEndDate%counter%=Enter End date
set ss
If "%counter%"=="3" Goto AnotherBlockOfCode
choice /m "Enter Yes or No."
Rem Testing for N
if errorlevel 2 Goto AnotherBlockOfCode
Rem Testing for Y
if errorlevel 1 Goto StartLoop
goto :eof
:AnotherBlockOfCode
echo.
echo.
echo You chose No or already chosen 3 servers
echo.
goto :eof
答案 2 :(得分:0)
以下是获取数据输入的另一种方法:
批处理文件告诉您如何结束数据输入,然后提示输入数据集 - 我已经显示输入了两组数据 - 然后它使用循环显示输入的数据集。
您可以输入无限数量的数据集。
这是屏幕显示:
Press enter when you have finished
Enter data in this format: servername,startdate,enddate \\server1,20010301,20010331
Enter data in this format: servername,startdate,enddate \\server2,20030102,20030103
Enter data in this format: servername,startdate,enddate
"servername=\\server1"
"startdate=20010301"
"enddate=20010331"
"servername=\\server2"
"startdate=20030102"
"enddate=20030103"
Press any key to continue . . .
以下是代码:使用评论中的额外功能进行编辑
@echo off
del data.csv 2>nul
set "MyLogFile=c:\temp3\copy.log"
set "targetdir=c:\temp3"
echo Press enter when you have finished
:loop
set "data="
set /p "data=Enter data in this format: servername,startdate,enddate "
if defined data (
>>data.csv echo %data%
goto :loop
)
for /f "tokens=1,2,3 delims=," %%a in (data.csv) do (
rem echo.
rem echo "servername=%%a"
rem echo "startdate=%%b"
rem echo "enddate=%%c"
pushd "%%a"
for %%x in (*web_feed.out.gz) do (
for /f "delims=." %%y in ("%%x") do (
echo comparing server "%%a" : file "%%x"
if %%y geq %%b if %%y leq %%c (
echo copying "%%x"
echo - date range %%b to %%c and %%y found
copy "%%x" "%targetDir%\%%x" >> "%MyLogFile%"
)
)
)
popd
)
pause
文件data.csv
用于存储数据条目集,并在for-for-do循环中使用,它读取data.csv以回显输入的数据集。
第二行删除data.csv(如果存在),以便不会重复使用上一组数据。