截至目前爲止,我使用下面的批處理執行操作。 在/ d %% G(「*」)DO命令如果批處理For循環中使用條件
- 此exeuctes命令上作爲我已經mnentioned的所有文件夾「*」現在我需要跳過的文件夾(具有名稱*共享)在上面的命令。
請指教,如果我可以使用IF循環來執行相同的操作,我該怎麼辦。 或建議是否有任何簡單的方法執行
截至目前爲止,我使用下面的批處理執行操作。 在/ d %% G(「*」)DO命令如果批處理For循環中使用條件
請指教,如果我可以使用IF循環來執行相同的操作,我該怎麼辦。 或建議是否有任何簡單的方法執行
您可以檢查%%G
變量以查看文件夾名稱是什麼。從那裏,你可以得到最後6個字符,看看值是否爲Shared
。
我們使用SETLOCAL ENABLEDELAYEDEXPANSION
,以便我們可以更新循環內的變量。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /D %%G in ("*") DO (
SET str=%%G
IF /I "!str:~-6!" NEQ "Shared" (
Command
)
)
PAUSE
另一種選擇是使用FINDSTR過濾DIR命令的輸出並使用FOR/F處理結果。
for /f "eol=: delims=" %%G in ('dir /b /ad ^|findstr /lie "shared"') do command
這裏是LittleBobbyTables的解決方案更強大的版本,在文件夾名稱與!
工作。它也適當地做了一個不區分大小寫的比較。
setlocal disableDelayedExpansion
for /d %%G in (*) DO (
set "str=%%G"
setlocal enableDelayedExpansion
if /i "!str:~-6!" neq "shared" command
endlocal
)
總的來說不錯,但是請注意,如果文件夾名包含一個'!'字符,'SET str = %% G'將會失敗。可以通過在循環中打開和關閉延遲擴展來解決。 – dbenham 2012-07-10 20:04:14
在命令和比較應該不區分大小寫的情況下,還需要刪除DO。 – dbenham 2012-07-10 20:13:35
@dbenham - 你是對的;我之前在那裏有'ECHO YAY',並且懶散地複製了'DO Command'。我對包含'!'的文件夾'SET str = %% G'沒有任何錯誤。 – LittleBobbyTables 2012-07-10 20:14:32