如何在Windows批处理文件中接受逗号分隔列表作为一个参数

时间:2017-09-08 13:50:33

标签: windows batch-file

我目前有一个批处理文件,它接受一些参数并将它们作为变量传递给配置文件。其中一个参数是日志文件的路径。

配置文件接受批处理文件中的变量,如下所示:

path => "${LOGFILE}"

如果我直接在配置文件中指定路径,将按以下方式接受:

path => [ "/dir1/dir2/*.log", "/dir3/dir4/*.log"

以下是param" -logfile"的批处理代码。哪个回声为%LOGFILE%:

IF "%~1"=="-logfile" (
   IF NOT EXIST "%~2" (
      echo "**********************"
      echo "ERROR: Log file %~2 does not exist. Exiting"
      goto exit
      ) ELSE (
         ::
         :: Convert to unix format... that's what logstash expects
         ::
     set LOGTEMP=%~2
     set LOGFILE=!LOGTEMP:\=/!

我的目标是能够输入像

这样的命令
my_batfile -logfile /dir1/dir2/*.log, /dir3/dir4/*.log -nextarg blahblahblah

目前,当我尝试此操作时,批处理文件会识别逗号并分隔路径。

我希望我已经说清楚了,抱歉有任何困惑。

修改

对于路径周围的引用,批处理文件将路径识别为一个字符串。但是,现在它是一个字符串,它无法验证这些路径是否存在,因此会产生错误。

我认为现在我需要做的是能够遍历列表中的每个路径,但将它们作为一个变量传递给配置文件。这条道路的另一个障碍是路径的数量可能并不总是相同。

如果有人对达到这个目标的方式有任何建议,我们也会非常感激!

感谢您的帮助! - 米兰达

1 个答案:

答案 0 :(得分:0)

以下是解析参数的方法。我敢肯定,你可以自己插入“工作量”

@echo off & setlocal 

IF "%~1"=="-logfile" call :parse %~2
if "%~3"=="-nextarg" call :parse %~4
goto :eof

:parse
if "%~1" == "" goto :eof
echo %~1
shift
goto :parse

尝试:

my_batfile -logfile "/dir1/dir2/*.log, /dir3/dir4/*.log" -nextarg "blahblahblah,blublublub,bliblibli

被调用的子程序具有独立于“主”参数的“自己的”参数%<n>。因此子例程中的%1与原始参数中的%1不同,但是第一个参数赋予子例程

剩余问题:您不能使用包含空格的路径(""path with space","path2 with spaces""无法解析正确)