2017-09-08 43 views
1

我目前有一個批處理文件,它接收一些參數並將它們作爲變量傳遞給配置文件。其中一個參數是日誌文件的路徑。如何接受逗號分隔列表作爲windows批處理文件中的一個參數

配置文件接受來自批處理文件中的變量如下:

path => "${LOGFILE}" 

如果我直接將被接受作爲在配置文件中指定的路徑如下:

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

以下是參數「-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

一種方法是添加它們沒有''然後只是建立在批處理文件中加入'聯接%〜2'和'%〜3'以逗號分隔。 –

+0

你也試過用引號括住路徑嗎? '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""不會解析正確)

相關問題