批处理代码:如何从输入列表中选择参数?

时间:2014-06-12 09:12:21

标签: batch-file batch-processing

我在这个论坛上真的很新,所以我希望尊重你所有的规则,如果没有请原谅我!

我刚刚开始研究批处理文件,我试图通过批量传递参数来执行一个简单的程序(最后一个目的是提交一个传递日期参数的SAS程序)。

是否可以激活一种列表,我可以在预先定义的参数之间选择一些?

- >这是我工作的真正目的

我试图"玩"使用此代码:

    @echo off

    title Setting up execution period

    echo Insert your date in the format GGMMMAAAA (es: '31DEC2003'D).

    SET /p data_par=Insert the date to filter datas:

    SET first_byte=%data_par:~1,1%

    if "%first_byte%"=="" (

           GOTO tag1 

    ) else (

           GOTO tag2
)

:tag1
   msg * Missing value

:tag2
   msg * Well done!

pause

我已经尝试了很多方法,但看起来IF声明没有执行,我不知道我哪里错了。

另一个问题:为什么在按下"输入" (执行set / p命令后)?

- >已经解决了这个问题,然后暂停"暂停"脚本末尾的命令。

谢谢大家的关注,

祝你好运!

Squotty

2 个答案:

答案 0 :(得分:1)

在代码末尾添加pause以查看错误消息。

使用ifelse的正确语法是:

if "a"=="b" (dosomething) else (dosemethingelse)

你可以用几行来写它,但是有规则,在哪里设置副词:

if "a"=="b" (
  echo this is code for something
  rem more lines possible
) else (
  echo this is code for something else
  rem more lines possible
)

第一个(必须与if位于同一行。

) else (必须在一条线上。

如果按下只需输入set /p,变量将保持不变(可能为空),因此您的代码将继续使用代码并点击else行。在这里它会告诉你"否则不会被识别为命令..."

在你的tagx你应该告诉批次,在哪里停止执行。使用goto :eof停止执行,或goto somewhere继续执行其他操作。如果你不这样做,它将继续下一行。

示例:

:tag1
   msg * Missing value
   goto :eof
:tag2
   msg * Well done!
   goto :continue
pause
:continue
REM go on with the program...

(注意:永远不会达到pause。我会在那里向你展示,事情是如何运作的)

编辑而不只是检查一些输入,您可以检查格式是否正确:

echo %data_par%|findstr /r "[0-3][0-9][A-Z][A-Z][A-Z][1-2]0[0-9][0-9]">nul && (
  echo correct format 
  goto continue
)  || (
  echo wrong format
  goto startover
)

它不是防弹(例如。38ABC2019将被视为"正确"),但至少它会检查正确的格式(例如15.12.2019或{ {1}}"不正确")

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL

SET "item1=date1"
SET "item2=date2"
SET "item3=date3"
SET "item4=date4"

FOR /l %%a IN (1,1,4) DO CALL ECHO(%%a. %%item%%a%%
ECHO(U. User-specified
choice /c 1234u
CALL SET selection=%%item%errorlevel%%%
IF NOT DEFINED selection (
 SET /p selection="Your date-selection ? "
)
IF NOT DEFINED selection ECHO No selection made&GOTO :EOF 
ECHO selection is %selection%

GOTO :EOF

此代码可能有所帮助。

使用批处理窗口开发批处理代码是正常的。只需设置command prompt(开始>程序>附件)的快捷方式,即可一遍又一遍地运行脚本并在屏幕上保留结果,而无需使用“暂停”。可以使用提示中的notepad batchfilename.bat来完成编辑(如果您使用记事本作为编辑器 - 如果使用更好的东西,则替换该程序的名称)。您可以通过执行exit命令退出批处理窗口。

您还可以使用commandname /?获得有关批处理命令的帮助 - 它通常很神秘并且有很多怪癖。这里提供了广泛的帮助。