2013-04-14 76 views
0

%params%包含一個變量組參數:查找字符串包含可變順序參數的子串(文件路徑)

/tidy /log /truncate /convert D:\libdir 也許

/log /tidy D:\cyclea\libfolder /test /convert /truncate 

的一切,但(目前單)文件路徑元素我使用它:

if "%params%"=="%params:log=%" goto :DontLogit 

    if NOT "%params%"=="%params:/tidy=%" (call tidysub: & do something else) 

現在我想提取filepath元素並將其用作命令的參數例如chdir

我已經打了,但我弱與DOS字符串操作和for循環..

我想保持PARAMS變量的順序。 對於信息它來自這裏:

FOR %%s IN (%*) DO (set params=!params! %%s) 

回答

0
@echo off 
setlocal EnableDelayedExpansion 

rem Get the single filepath element (with colon in second character): 
set params=/tidy /log /truncate /convert D:\libdir 
set filepath= 
for %%a in (%params%) do (
    set par=%%a 
    if "!par:~1,1!" == ":" (
     set filepath=%%a 
    ) 
) 
if defined filepath (
    echo Filepath = %filepath% 
) else (
    echo Filepath not given 
) 
echo/ 

rem Get multiple filepath elements in an *array*: 
set params=/log /tidy D:\cyclea\libfolder /test /convert D:\libdir /truncate 
set i=0 
for %%a in (%params%) do (
    set par=%%a 
    if "!par:~1,1!" == ":" (
     set /A i+=1 
     set filepath[!i!]=%%a 
    ) 
) 
echo There are %i% filepath elements: 
for /L %%i in (1,1,%i%) do (
    echo %%i- !filepath[%%i]! 
) 

您可以查看在陣列管理的進一步描述在這個職位:Arrays, linked lists and other data structures in cmd.exe (batch) script

+0

Aacini,非常感謝。這現在在我的代碼中。我曾經想過結腸,但想不起如何提取它。事實上,它總是會在那裏,在第二個字符只是沒有計算。另外我也會把自己與潛在的文件路徑混爲一談。\等等。有時我只是想念那些顯而易見的東西。我實際上不會使用多文件路徑;我的大腦又一次變得複雜化了,但是謝謝它,因爲我需要類似的東西。再次感謝所有最好的比爾 – user2278681

1
@ECHO OFF 
SETLOCAL 
SET swparams=log tidy test convert truncate 
FOR %%i IN (%swparams% other) DO SET "%%i=" 
FOR %%i IN (%*) DO (
    SET "used=" 
    FOR %%p IN (%swparams%) DO (IF /i "/%%p"=="%%~i" SET %%p=Y&SET used=Y) 
    IF NOT DEFINED used CALL SET other=%%other%% "%%~i" 
) 

ECHO =============paramsreport=========== 
FOR %%i IN (%swparams%) DO IF DEFINED %%i (ECHO %%i:set) ELSE (ECHO %%i:clear) 
ECHO other=%other% 
FOR %%i IN (%other%) DO ECHO %%i or %%~i 
GOTO :EOF 

這裏有一個辦法,應該是可擴展的爲您服務。

只需將切換參數設置到swparams的列表中即可。

參數名稱和OTHER設置爲[無]以確保它們尚未設置在環境中。 Ech提供的參數依次應用於%% i,並依次與每個定義的swparam進行匹配。在匹配之前清除變量USED,並且如果找到匹配(/switchparametername),則設置開關參數並設置USED標誌。 如果沒有設置使用標誌gainst任何開關參數,則解析技巧是用來積累任何不能識別的字符串爲OTHER

"%%~i"機制第一dequotes中%%我的項目,然後引用它。通過這種方式,它最終報價,不管它原來有報價或沒有。

if上的/i執行不區分大小寫的匹配。

因此運行這個批處理

thisbatch /tidy "C:\some filename with spaces.txt" 

將產生TIDY設置爲YLOGtestconvert,沒有設置truncateother設置爲"C:\some filename with spaces.txt"

+0

感謝這對彼得和抱歉延遲迴應。 – user2278681

相關問題