バッチを使用してテキストファイルをループし、文字列の一部を削除します。

バッチを使用してテキストファイルをループし、文字列の一部を削除します。

Windows のコマンド ラインを使用して次の操作を実行するにはどうすればよいですか?

C:\Users\My Computer\SkyDrive\WORK ORDERS\Subdivision\Sec. 1\12345678_123 LUMINAIRE LN.pdf

becomes

WORK ORDERS\Subdivision\Sec. 1\12345678_123 LUMINAIRE LN.pdf

私はLinuxに精通しており、以下を使用しています

cat wo.txt2 | grep "WORK\|pdf|" | sed 's/^.*WORK/WORK/' >> wo.txt

私のテキストファイルには約17,000行あります

答え1

純粋なバッチを使用する:

@echo off
setlocal disableDelayeExpansion
set "input=wo.txt2"
set "output=wo.txt"
>"%output%" (
  for /f "delims=" %%A in ('findstr /n "^" "%input%"') do (
    set "ln=%%A"
    setlocal enableDelayedExpansion
    set "ln=!ln:*:=!"
    if defined ln set "ln=!ln:*WORK=WORK!"
    (echo(!ln!)
    endlocal
  )
)

WORK の検索では大文字と小文字は区別されないことに注意してください。

FINDSTR は、空白行を保持するために、各行の先頭に行番号とそれに続くコロンを付けるために使用されます。

遅延拡張はループ内でオンとオフが切り替えられ、!ソース ファイル内に存在する可能性のあるものを保持します。

もっと簡単な解決策は、私のJREPL.BAT 正規表現テキスト処理ユーティリティ- XP 以降のすべての Windows マシンでネイティブに実行される純粋なスクリプト ベースのユーティリティ (ハイブリッド JScript/バッチ)。

コマンドラインから:

jrepl "^.*WORK" "WORK" /f "wo.txt2" /o "wo.txt"

バッチ スクリプト内でコマンドを使用する場合は、CALL JREPL を使用する必要があります。

答え2

Notepad++ を使用してファイルを開き、Alt キーを押して、マウスで不要なテキストの「列」を選択します。Alt キーを押しながら列モードのままになります。Alt キーを放して Del キーを押します。これは、すべての行に削除する文字数が同じである場合に有効です。

答え3

次の例のような文字列関数を見てみましょう。

   str=帽子の中の猫を設定する  
   エコー.%str%
   str=%str:teh=the% を設定します
   エコー.%str%

C:\Users\My Computer\SkyDrive\基本的には空白に置き換えます。

使用できる文字列関数のリストは次のとおりです。http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString

関連情報