S:\Images\.html 私は上記のテキストを開発しました。私はバッチスクリプトでは最善ではありませんが、変数の使い方を知っています(PHPやC ++で)。 私の目標は、ユーザーの電子メール署名ファイルを更新することです。"> S:\Images\.html 私は上記のテキストを開発しました。私はバッチスクリプトでは最善ではありませんが、変数の使い方を知っています(PHPやC ++で)。 私の目標は、ユーザーの電子メール署名ファイルを更新することです。"> S:\Images\.html 私は上記のテキストを開発しました。私はバッチスクリプトでは最善ではありませんが、変数の使い方を知っています(PHPやC ++で)。 私の目標は、ユーザーの電子メール署名ファイルを更新することです。" />

フォルダ内の* .htmlを検索して特定のコードを実行する

type "S:\Images*.html" | findstr /v Signature | findstr /v sealants | findstr /v construction >S:\Images\.html

私は上記のテキストを開発しました。私はバッチスクリプトでは最善ではありませんが、変数の使い方を知っています(PHPやC ++で)。

私の目標は、ユーザーの電子メール署名ファイルを更新することです。 (私は3行のテキストを削除しようとしています)。 これを行うには、共有ドライブでhtmlファイルを検索し、削除する必要がある3行を見つけようとします。

キャッチは、バッチスクリプトで変数や検索を行うのはあまりよくありません。私は変更しているファイルを上書きしたい。

0

2 答え

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ファイルに書き込んで、少なくとも1つの単語を含む行を取り除きます。次に、単に古いファイルを削除し、.tmpの名前を元の名前に変更します。

大文字と小文字を区別して検索する場合は、両方のFINDSTRコマンドに/ iオプションを追加します。

私は検索があまりにも一般的であることを心配しています。どの言葉も複数の文脈の中に現れる可能性があります。これにより、意図しない悲惨な結果につながる可能性があります。私はあなたが検索するためのより具体的なパターンが必要かもしれないと思っています。 FINDSTRは、粗正規表現をサポートします。削除する行ごとに適切な正規表現を見つけることができる場合は、/ lを/ rに変更し、引用符で囲まれた検索文字列を3つの/ c: "regularExpression"引数に置き換えます。もちろん、これは両方のFINDSTRコマンドに対して実行されます。また、.htmlの名前がそれをより選択的にするためのパターンを持っている場合に役立ちます。

最後に、元の.htmlを単純に上書きするのではなく、何か問題が生じた場合に備えて、元のコピーを保持する方が安全です。私のコードの del "%% f" 行を

  del "%%f.bak" 2>nul
  ren "%%f" "%%~nxf.bak"
1
追加された

このコードはどうやって来たのですか?ステップバイステップでソリューションの実装(BATファイルであるかどうか)を進め、マニュアルを読んで、自分で試し、問題をデバッグする方法を学ぶ必要があります。

あなたのコードを試してみると、 TYPE コマンドが何をするのかを知ることができます(ディレクトリは表示されません)。 「HELP 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をオフにしたり、他の呪文を追加したりする。コマンドラインで@を削除してください。 ...

すべての部分をまとめて、次のコード

 @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 を削除します。

1
追加された
これは本当に素晴らしく、はっきりしていますが、この質問は、予期せぬ動作をする可能性があります。
追加された 著者 Andriy M,
良い点、私はq&dの解決策のためにいくつか編集しました。
追加された 著者 PA.,