2012-04-23 60 views
1

似乎與/ B選項(裸格式)一起使用時不識別/升(小寫)選項「dir」命令。 我試圖獲得目錄中的文件的擴展名,但我無法去除案件,呈現以下代碼對於擴展名中帶有大寫字母的所有文件都無用。BATCH:DIR/B的輸出轉換爲小寫

for /f "delims=" %%a in ('dir /l /b/a-d /s') do (
if "%%~xa"==".iso" echo %%~xa 
if "%%~xa"==".bin" echo %%~xa 
) 

有沒有解決方法呢?

+0

適合我在Win 7. – Joey 2012-04-23 19:04:20

回答

2

dir /l當然適用於我,即使在你給那裏的開關組合。但即使沒有,有兩個簡單的事情:

  1. 不要使用for /f遍歷dir輸出。這很容易出錯,並且會破壞Unicode字符,除非您正確設置控制檯選項。使用

    for /r %%a in (*) do ... 
    

    相反,它也會遞歸地遍歷文件。

  2. 使用/I作爲一個選項if

    if /i "%%~xa" EQU ".iso" ... 
    

最後,爲何不採取簡單的方法:

for /r %%a in (*.iso *.bin) do ... 

這工作不區分大小寫:

H:. 
│ x 
│ 
├───a 
│  xyz.bin 
│  xyz.ISO 
│ 
└───b 
     abc.BIN 
     abc.iso 

H:\Stuff>for /r %x in (*.iso *.bin) do @echo %x 
H:\Stuff\a\xyz.ISO 
H:\Stuff\a\xyz.bin 
H:\Stuff\b\abc.iso 
H:\Stuff\b\abc.BIN 
1

您可以創建一個toUpper函數並在%%〜xa上調用它,然後與.ISO或.BIN進行比較。 Here's作爲參考。

0

現代Windows有powershell。 PS中的單線程將是:ls * -recurse -include *.iso,*.bin,這將忽略文件名的情況。 (lsdir的別名)[見喬伊的評論]

+0

你錯過了'-Recurse'。 'ls'是'Get-ChildItem'的別名(就像'dir'一樣)。 – Joey 2012-04-23 19:14:57

+0

@Joey:謝謝,添加了參數。關於ls是dir別名的評論是爲了保留OP的批處理世界中的術語。不想開始爲批次來的陌生人命名太多不真實的東西。 – 2012-04-23 19:42:00