2016-06-07 82 views
0

我正在編寫批處理以在當前目錄中的所有目錄上運行命令。.bat - 如何從目錄命令中刪除「dot」和「dot dot」項目

要開始,我做dir /A:D,但即使在...目錄上,我不想運行我的命令。

我知道我可以寫

IF NOT %%x EQU "." 
    IF NOT %%x EQU ".." 

排除它們但是,有沒有更通用的方法?像:

set EXCLUDED=".","..","bob" 
set FOLDERS=dir /A:D 
rem for each in EXCLUDED, remove from FOLDERS 
rem run my command(s) on FOLDERS 

回答

2

您可以添加/b開關排除...,只要你不需要通過dir /a:d提供的其他信息。

要排除其他目錄,使用find /v這樣的:

dir /a:d /b | find /v "bob" | find /v "alice" 

/v開關將輸出一切,但給定行。

+0

是否有解決方案,就像我的問題一樣,您可以提供一個包含要排除的項目列表的VAR?這將是最通用的解決方案。 – Adrian

+1

@Adrian您可以使用'findstr/v'來處理不符合正則表達式的行,並將變量設置爲要排除的正則表達式。 'findstr'語法將空格視爲多個搜索項的分隔符。例如,'set'excluded = intel link logitech「'then'dir/b/a:d |」 findstr/i/v「%excluded%」將匹配除Intel,Links或Logitech以外的所有目錄(不區分大小寫)。或者如果您打算採取的行動可以通過'robocopy'處理,您可以使用'robocopy'的'/ XD'開關來排除您指定的目錄。或者如果'xcopy',你可以使用它的'/ exclude'開關。 – rojo

+0

@rojo ok聽起來像我想要的。一旦我編輯它並粘貼你在評論部分寫的內容,我會接受你的回答。 – Adrian

0

顯然,您使用for循環(可能是for /f "..." %%x in ('dir ...') do ...)。有一個特殊的參數/D使用目錄的工作:

@echo off 
setlocal EnableDelayedExpansion 
FOR /D %%x IN (*) do (
    ECHO %%x|FINDSTR /ivx "bob joe jane">nul && (
    ECHO do stuff with %%x 
) || (
    ECHO skipping %%x 
) 
) 

(工程,只要有在「排除」文件夾名稱中沒有空格)

PS:沒有必要排除...這裏,因爲for /d不顯示它們。