2009-09-15 44 views
0

批處理文件:在批處理文件中,是否可以用for循環替換SED和TR的這種用法?

@echo. 
@set curdrive=%~d0 
@path | %curdrive%\utils\sed -e "s/PATH=//" | %curdrive%\utils\tr ; \n 
@echo. 

樣本輸出(每行一個路徑元素):

C:\cheeso\bin 
C:\Perl\bin 
c:\utils 
C:\Windows\system32 
C:\Windows 
C:\Windows\System32\Wbem 
c:\Program Files\Microsoft SQL Server\90\Tools\binn\ 
c:\.net3.5 
c:\.net2.0 
c:\vs2008\common7\IDE 
c:\netsdk2.0\bin 

此批處理文件依賴於sed.exe和從UnxUtils的tr.exe。 我只想使用Windows附帶的內置命令和程序來做同樣的事情。我可以做嗎?提示?

回答

1
setlocal 
SET _Path="%Path:;=";"%" 
FOR %%a IN (%_Path%) DO ECHO  %%~a 
endlocal 
1

警告,濫用遞歸的未來:

@echo off 

call :one "%PATH%" 
goto :eof 

:one 
for /f "tokens=1,* delims=;" %%i in (%1) do (
    echo %%i 
    if not "%%j"=="" call :one "%%j" 
) 
+1

用戶「周杰倫」在這裏有一個偉大的選擇:http://stackoverflow.com/questions/817280/how-does-for-work-in -cmd-batch-file/1293667#1293667 – 2009-09-15 04:44:07

1

這裏有一個非遞歸版本。不是真的好,但我覺得在尋找另一種解決方案:

SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS 
:again 
FOR /F "delims=;" %%I IN ("%PATH%") DO ECHO %%I & SET PATH=!PATH:%%I;=! 
IF DEFINED PATH GOTO :again 
ENDLOCAL 

我相信,這將僅適用於Windows XP,2003 Server和新的工作。

+0

你試過這個嗎?它只是在無限循環中打印第一個值。 「for」循環不會重新評估parens中的表達式。 – 2009-09-15 03:57:23

+0

@Adam - 是的,它可以在Windows 2003上正常工作。您正確的是在'FOR'循環輸出第一個項目。然後它從'PATH'中刪除這個項目。只要路徑不是空的,「IF DEFINED」就會被執行。輸入'SET'語句時要小心。 – 2009-09-15 15:00:45

+0

比UnxUtils版本好得多,我也喜歡它比遞歸evrsion更好。但是我沒有爲我工作,直到我追加了最後的終止;到路徑。 – Cheeso 2009-09-15 19:28:36

0

我開始使用這樣的:

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS 
set tpath=%path%; 
echo. 
:again 
FOR /F "delims=;" %%I IN ("%TPATH%") DO (
    echo %%I 
    set TPATH=!TPATH:%%I;=! 
) 
IF DEFINED TPATH GOTO :again 

ENDLOCAL 

但後來確定這是簡單的:

setlocal 
set _path="%PATH:;=" "%" 
for %%p in (%_path%) do if not "%%~p"=="" echo  %%~p 
endlocal 
+0

信貸到期的貸方。更簡單的一個是傑伊在這裏的例子:http://stackoverflow.com/questions/817280/how-does-for-work-in-cmd-batch-file/1293667#1293667 – 2009-09-16 00:13:29

0

我想這是我的Windows 2003服務器上,它的工作。這裏是我的showpath.cmd的內容:

@echo off 
for %%p in (%PATH%) do echo %%p 
+0

這不適合我的路徑,因爲我的路徑包含包含空格的目錄名稱。因此,「C:\ ProgramFiles \ Microsoft Team Foundation Server 2008 Power Tools \」會顯示在8行上。 – Cheeso 2009-09-15 20:08:41

相關問題