使用批次循環遍歷文字檔案並剝離部分字串

使用批次循環遍歷文字檔案並剝離部分字串

如何使用 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

我的文字檔案大約有 17k 行

答案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 正規表示式文字處理公用程式- 一個基於純腳本的實用程式(混合 JScript/批次),可在 XP 及以上版本的任何 Windows 電腦上本機執行。

從命令列:

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

如果在批次腳本中使用該指令,則必須使用 CALL JREPL。

答案2

使用記事本++,開啟文件,按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

相關內容