似乎與/ 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
)
有沒有解決方法呢?
似乎與/ 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
)
有沒有解決方法呢?
dir /l
當然適用於我,即使在你給那裏的開關組合。但即使沒有,有兩個簡單的事情:
不要使用for /f
遍歷dir
輸出。這很容易出錯,並且會破壞Unicode字符,除非您正確設置控制檯選項。使用
for /r %%a in (*) do ...
相反,它也會遞歸地遍歷文件。
使用/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
您可以創建一個toUpper函數並在%%〜xa上調用它,然後與.ISO或.BIN進行比較。 Here's作爲參考。
現代Windows有powershell。 PS中的單線程將是:ls * -recurse -include *.iso,*.bin
,這將忽略文件名的情況。 (ls
是dir
的別名)[見喬伊的評論]
你錯過了'-Recurse'。 'ls'是'Get-ChildItem'的別名(就像'dir'一樣)。 – Joey 2012-04-23 19:14:57
@Joey:謝謝,添加了參數。關於ls是dir別名的評論是爲了保留OP的批處理世界中的術語。不想開始爲批次來的陌生人命名太多不真實的東西。 – 2012-04-23 19:42:00
適合我在Win 7. – Joey 2012-04-23 19:04:20