我需要對多個文本檔案進行迭代,但要根據名稱或內容排除一些檔案。 我現在的做法是搜索整個檔案。這需要相當長的時間,而且是不必要的。 我希望 (Type "%%f" | FIND "" ) 只搜索前幾行。
for %%f in (*.ifc) do (
(Echo "%%f" | FIND /I "優化" 1>NUL) || (
(Type "%%f" | FIND /I "Solibri IFC Optimizer" 1>NUL) || (
回聲對檔案做一些事情
)))
謝謝你。
uj5u.com熱心網友回復:
這個解決方案使用JScript代碼部分,將行數限制在每個檔案的前10行:
@if (@CodeSection == @Batch) @then
@echo off
for %%f in (*.txt) do (
echo File: %%f
< "%%f" CScript //nologo //E:JScript "%~F0" | find /N /V ""
echo ================
echo/
)
goto :EOF
@end
// JScript部分:只顯示指定數量的輸入行
var fso = new ActiveXObject("Scripting.FileSystemObject"),
stdIn = fso.GetStandardStream(0),
stdOut = fso.GetStandardStream(1);
for ( var i=1; i <= 10; i ) {
stdOut.WriteLine(stdIn.ReadLine())。
}
uj5u.com熱心網友回復:
除非我誤解了你想做的事情,即優化當前目錄下的每個IFC檔案,這些檔案不包含字串Solibri IFC Optimizer,并且檔案名中沒有子串_optimized,那么明顯要做的事情就是在你的for回圈中過濾所有檔案。在鏈條的早期進行過濾要比后期進行過濾效率高得多。例如:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
設定"SIO=%ProgramFiles%SolibriIFCOptimizerSolibri IFC Optimizer.exe"/span>。
Echo 優化以前未優化的IFC檔案 在當前目錄中。
對于 /F "Delims=:" %%G 在 ('%SystemRoot%System32findstr.exe /R "^FILE_NAME( "
*.ifc ^| %SystemRoot%System32findstr.exe /VRC:"_optimized.ifc:"
/C:"(Solibri IFC Optimizer)"') Do "%SIO%" -in="%G" ...。
請記得根據需要調整SIO的變數值。你還需要調整最后一行命令,我目前只包括in引數。我將讓你來決定是否需要包括-out檔案/目錄引數,并在-ifc或-ifczip壓縮引數中選擇。然而,我認為你很可能想要包括-force引數,因為看起來你正在用-suffix的默認_optimized覆寫原始檔案。
作為一個附帶說明,你可能會發現,由于這涉及到為每個以前未優化的檔案呼叫一個單獨的Solibri IFC Optimizer.exe實體,你可能希望考慮從for回圈中創建一個分號分隔的檔案名串列。然后使用in引數,(in=file1;file2;file3;...)。這將只呼叫一個Solibri IFC Optimizer.exe的模擬實體,這可能會更有效率。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/315737.html
標籤:
