2011-12-18 69 views
0

鍵入「S:\ Images * .html」| findstr/v簽名| findstr/v密封膠| findstr/v construction> S:\ Images \ .html搜索文件夾中的* .html並運行特定代碼

我開發了上述文本。我不是批處理腳本的最佳人選,但是我知道如何使用變量(在PHP和C++中)。

我的目標是更新用戶的電子郵件簽名文件。 (我想刪除三行文字)。 爲了做到這一點,我想搜索他們的共享驅動器的任何HTML文件,並嘗試找到我需要刪除的三條線。

這個問題是我不太擅長變量和在批處理腳本中搜索。我想覆蓋我正在修改的文件。

回答

1

你是怎麼得到這段代碼的?您應該學習如何逐步實施解決方案(不管是否是BAT文件),閱讀手冊,嘗試自己並調試問題。

當你嘗試你的代碼時,你會意識到什麼TYPE命令(它不會列出目錄)。請參閱「幫助類型」。請使用FOR命令。見HELP FOR,然後嘗試這個命令行

FOR %a in (*.HTML) do @echo %a 

,然後讀取HELP FINDSTR,並嘗試這個命令行

FOR %a in (*.HTML) do @findstr /v "Signature sealants construction" %a 

而你幾乎完成。你需要做一些小的修改,把它放在一個.BAT文件中:要在BAT中使用FOR,你需要將%va替換爲%% a;添加一些@echo off和其他咒語;在命令行中刪除@; ...

將所有拼在一起,泰伊下面的代碼

@echo off 
FOR %%a in (*.HTML) do (
    FINDSTR /i /v "Signature sealants construction" %%a >%%~na.html.new 
) 
echo del *.html 
echo ren *.html.new *.html 

測試並修改它以滿足您的需求,請記住,這只是一個起點。如果完全正確,請刪除ECHO

+2

這看起來很不錯,清晰更換del "%%f"線在我的代碼,但是,通過[這個問題](http://stackoverflow.com/questions/8366864/windows-7-batch-判斷script-for-command-error-bug),可能會出現意外情況。 – 2011-12-19 18:44:18

+0

好點,我做了一些q&d解決方案的編輯。 – 2011-12-19 20:02:32

1
for "eol=: delims=" %%f in ('findstr /s /m /l "Signature sealants construction" "*.html"') do (
    findstr /l /v "Signature sealants construction" "%%f" >"%%f.tmp" 
    del "%%f" 
    ren "%%f.tmp" "%%~nxf" 
) 

上面應該從您要開始搜索的文件夾中運行。外部循環查找包含任何單詞的所有html文件。在循環內部,它將每個找到的文件寫入一個.tmp文件,去除包含至少一個單詞的任何行。然後它只是刪除舊文件並將.tmp重命名爲原始文件。

如果您希望搜索區分大小寫,請將/ i選項添加到兩個FINDSTR命令中。

我擔心搜索過於籠統。任何單詞都可能出現在多個上下文中。這可能會導致災難性的意外結果。我想你可能需要更具體的模式來搜索。 FINDSTR支持粗糙的正則表達式。如果您可以找出要刪除的每行的良好正則表達式,則可以將/ l更改爲/ r,並用三個/ c:「regularExpression」參數(每個正則表達式一個參數)替換帶引號的搜索字符串。當然,這將對兩個FINDSTR命令都完成。如果.html的名稱具有某種模式以使其更具選擇性,它也可能有所幫助。

最後,不是簡單地覆蓋原始的.html,而是保留原始副本,以防萬一出錯。我建議您用

del "%%f.bak" 2>nul 
    ren "%%f" "%%~nxf.bak"