我有這個代碼
for /R "C:\myfiles" %%i in (*super*.ts) do (
echo %%i
)
所以我想遍歷檔案夾C:\myfiles中路徑中的所有檔案super并以.ts. 例如
"c:\myfiles\foo\bar\super\123.ts"
但是那個子字串搜索不起作用。
uj5u.com熱心網友回復:
那這個呢:
dir /S /B C:\myfiles\*.ts | findstr /I "Super"
解釋:
dir /S : search in subdirectories
dir /B : show bare format, like C:\myfile\subdir\filename.ts
...
findstr /I : filter is case insensitive
uj5u.com熱心網友回復:
您的for /R回圈搜索名稱包含的檔案super,但這不是您想要的。
如果出現以下情況之一,您可以使用以下代碼片段:
如果單詞
super可能出現在路徑中的任何位置,即使在檔案名中:for /F "delims=" %%F in (' dir /S /B /A:-D-H-S "C:\myfiles\*.ts" ^| findstr /I /C:"super" ') do ( echo(%%F )排除目錄以及隱藏檔案和系統檔案的
/A:-D-H-S選項。dir如果單詞
super是層次結構中任何目錄的名稱:for /F "delims=" %%F in (' dir /S /B /A:-D-H-S "C:\myfiles\*.ts" ^| findstr /I /C:"\\super\\" ') do ( echo(%%F )搜索運算式
\\中的構成轉義的。findstr\如果單詞
super是直接父目錄的名稱:for /F "delims=" %%F in (' dir /S /B /A:-D-H-S "C:\myfiles\*.ts" ^| findstr /I /R /C:"\\super\\[^\\][^\\]*\.ts$" ') do ( echo(%%F )該字串
\\super\\[^\\][^\\]*\.ts$是一個findstr正則運算式,它在右側 ($) 錨定一個字串,該字串由文字字串\super\加上至少一個除\文字字串之外的字符組成的字串.ts。這是一種替代方法,沒有陳述句
findstr,而是使用標準回圈來決議父目錄的名稱:ifforfor /R "C:\myfiles" %%F in (*.ts) do ( for %%E in ("%%~F\..") do ( if /I "%%~nxE"=="super" echo(%%~F ) )這可能會更快,因為沒有也
for /F沒有涉及管道 (|),它們都實體化了新cmd.exe實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420401.html
標籤:
下一篇:==和EQU運算子之間的區別?
