Loop através do arquivo de texto removendo parte da string usando lote

Loop através do arquivo de texto removendo parte da string usando lote

Como posso usar a linha de comando do Windows para fazer o seguinte?

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

Estou mais familiarizado com o Linux, para o qual uso o seguinte

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

Há cerca de 17 mil linhas no meu arquivo de texto

Responder1

Usando lote puro:

@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
  )
)

Observe que a pesquisa por WORK não diferencia maiúsculas de minúsculas.

O FINDSTR é usado para prefixar cada linha com o número da linha seguido de dois pontos, de modo a preservar as linhas em branco.

A expansão atrasada é ativada e desativada dentro do loop para preservar qualquer !coisa que possa existir no arquivo de origem.

Uma solução muito mais simples é usar meuUtilitário de processamento de texto regex JREPL.BAT- um utilitário puro baseado em script (JScript/batch híbrido) que roda nativamente em qualquer máquina Windows a partir do XP.

Na linha de comando:

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

Você deverá usar CALL JREPL se usar o comando em um script em lote.

Responder2

Use o notepad ++, abra o arquivo, pressione a tecla alt e selecione as "colunas" de texto que você não deseja com o mouse. Enquanto você pressiona a tecla Alt, você permanece no modo de coluna. Solte a tecla alt e pressione del. Isto é válido se todas as linhas tiverem o mesmo número de caracteres a serem excluídos.

Responder3

Dê uma olhada nas funções de string como este exemplo:

   set str=o gato no chapéu  
   eco.%str%
   definir str=%str:teh=o%
   eco.%str%

Você basicamente deseja substituir C:\Users\My Computer\SkyDrive\por um espaço em branco.

Aqui está uma lista de funções de string que você pode usar:http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString

informação relacionada