2012-12-19 242 views
1

在名爲my.bat的dos/windows cmd批處理腳本中,我想對當前目錄中除批處理文件my.bat以外的所有文件執行命令。 我目前在my.bat中使用下面的命令僅爲* .txt * .ppt運行命令,但實際上可能會將不同擴展名的新文件添加到該文件夾​​,並因此通過排除一種類型的文件擴展名來執行此命令(在我的情況下* .bat)會變得可讀/有用。Dos批處理腳本排除某些擴展名的文件

FOR /F "delims=|" %%i IN ('dir /b *.txt *.ppt') DO echo %%i 

的問題是:如何排除該文件單獨與特定的文件擴展名,並就所有擴展的所有文件的命令執行,除了排除嗎?

+0

如果我只需要打印的文件擴展名即「doc」,而不是「.doc」,這就是%%〜xi給出如何刪除「。」的一種查詢方式。 [文件擴展名]中的[點]。 – goldenmean

回答

3
FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do if not %%~xi==.bat echo %%i 

我在和否則你不會得到完全的文件名,如果他們有空間添加tokens=*

編輯

爲了呼應沒有點

setlocal enabledelayedexpansion 
FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do (
set e=%%~xi 
set e=!e:.=! 
echo !e! 
) 

這是提供該文件沒有任何其他的點,否則它會刪除它們。這比僅僅從最後刪除第4個字符要強壯一些,因爲並非所有文件都有3個字符的擴展名。

+0

好的,謝謝。如果我只需要打印文件擴展名即「doc」,而不是「.doc」,那麼%%〜xi給出瞭如何刪除「。」的方法。 [文件擴展名]中的[點]。 – goldenmean

+0

好吧,我已經更新了我的答案,因爲這有點棘手。 –

+0

謝謝。我在下面添加到我的do命令中,但不能按預期工作。它仍然打印!分機!不剝離點。 DO( set ext = %%〜xi set ext =!ext:。=! echo!ext! ) – goldenmean

1

您可以通過findstr傳遞dir /b命令的輸出,就像這樣:

FOR /F "delims=|" %%i IN ('dir /b ^| findstr /v /r "^my.bat$"') DO echo %%i 

/v選項findstr打印任何不參數相匹配。該匹配基於正則表達式,該表達式僅匹配包含my.bat的行,而不包含其他任何內容。