我目前有一个批处理文件,它接受一些参数并将它们作为变量传递给配置文件。其中一个参数是日志文件的路径。
配置文件接受批处理文件中的变量,如下所示:
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
目前,当我尝试此操作时,批处理文件会识别逗号并分隔路径。
我希望我已经说清楚了,抱歉有任何困惑。
修改
对于路径周围的引用,批处理文件将路径识别为一个字符串。但是,现在它是一个字符串,它无法验证这些路径是否存在,因此会产生错误。
我认为现在我需要做的是能够遍历列表中的每个路径,但将它们作为一个变量传递给配置文件。这条道路的另一个障碍是路径的数量可能并不总是相同。
如果有人对达到这个目标的方式有任何建议,我们也会非常感激!
感谢您的帮助! - 米兰达
答案 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""
无法解析正确)