循环遍历文本文件,使用批处理剥离部分字符串

循环遍历文本文件,使用批处理剥离部分字符串

如何使用 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/batch),可以在 XP 及以上版本的任何 Windows 机器上本地运行。

从命令行:

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

如果在批处理脚本中使用该命令,则必须使用 CALL JREPL。

答案2

使用 notepad++,打开文件,按下 alt 键,然后用鼠标选择您不想要的文本“列”。按下 alt 键时,您将处于列模式。松开 alt 键并按下 del。如果所有行都有相同数量的字符需要删除,则此方法有效。

答案3

看一下类似以下示例的字符串函数:

   设置 str=teh cat in teh hat  
   回显。%str%
   设置 str=%str:teh=the%
   回显。%str%

您基本上想要C:\Users\My Computer\SkyDrive\用空白来替换。

以下是您可以使用的字符串函数列表:http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString

相关内容