2012-07-10 72 views
1

截至目前爲止,我使用下面的批處理執行操作。 在/ d %% G(「*」)DO命令如果批處理For循環中使用條件

  • 此exeuctes命令上作爲我已經mnentioned的所有文件夾「*」現在我需要跳過的文件夾(具有名稱*共享)在上面的命令。

請指教,如果我可以使用IF循環來執行相同的操作,我該怎麼辦。 或建議是否有任何簡單的方法執行

回答

1

您可以檢查%%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 
+0

總的來說不錯,但是請注意,如果文件夾名包含一個'!'字符,'SET str = %% G'將會失敗。可以通過在循環中打開和關閉延遲擴展來解決。 – dbenham 2012-07-10 20:04:14

+0

在命令和比較應該不區分大小寫的情況下,還需要刪除DO。 – dbenham 2012-07-10 20:13:35

+0

@dbenham - 你是對的;我之前在那裏有'ECHO YAY',並且懶散地複製了'DO Command'。我對包含'!'的文件夾'SET str = %% G'沒有任何錯誤。 – LittleBobbyTables 2012-07-10 20:14:32

1

另一種選擇是使用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 
)