2012-03-22 49 views
0

剛剛接觸批處理腳本並遇到問題:我被要求在整個c:\驅動器中列出名稱長度爲7個字母的所有文本文件並將其輸出到文件中。我無法弄清楚。批處理腳本 - FOR和IF

搜索谷歌的無盡小時後,我想出了這一點:

for /R C:\ %i in (.\*) do if %~ni==???????.txt echo %i > file.txt 

現在我明白這可能是錯誤的,由於事實上...它不工作。

在此先感謝。約翰·W·

回答

3

我想這會做到這一點。爲此,您並不需要一批文件

dir /s /b C:\*.txt | findstr "\\.......\.txt$" > files.txt 

更新:

,使之成爲123\123.txt使用工作

dir /s /b C:\*.txt | findstr "\\[^\\][^\\][^\\][^\\][^\\][^\\][^\\]\.txt$" > files.txt 
+0

好的,這比我的解決方案有點智能 – jeb 2012-03-22 11:47:09

+0

優秀!我在完全錯誤的軌道上,感謝您的快速反應! – JohnW 2012-03-22 11:47:33

+0

@jeb但是我知道你會對,所以我必須努力工作:) @JohnW現在我已經將'$'添加到正則表達式中,使其更加健壯。 – adarshr 2012-03-22 12:00:31

0

我把代碼放到一個批處理文件,那麼你必須仔細的百分號for循環。
由於FOR/R支持一些很好的功能,例如搜索文件掩碼,您可以使用它。

但是????將找到所有具有最大數量問號的文件,而不僅僅是excact匹配。
因此,我在以後測試文件名,如果它有至少7個字符

setlocal EnableDelayedExpansion 
for /R C:\temp\ %%i in (???????.txt) do (
    set "filename=%%~ni" 
    if "!filename:~6,1!" NEQ "" (
    echo has 7 characters %%i 
) 
) 
+0

感謝您的快速反應,然而,該解決方案下面是一個小我更容易弄清楚。不要說你的問題並不簡單,但我已經很困惑了。有一個問題,FOR命令的'set'參數是否不需要一組文件,而不是「??????。txt」字符串? – JohnW 2012-03-22 11:47:12