Faz um loop por meio do arquivo de texto que remove parte da string usando lote

1

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

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

becomes

WORK ORDERS\Subdivision\Sec. 1345678_123 LUMINAIRE LN.pdf

Estou mais familiarizado com o linux ao qual uso o seguinte

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

Existem cerca de 17 mil linhas no meu arquivo de texto

    
por user504181 01.10.2015 / 17:31

3 respostas

1

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 faz distinção entre maiúsculas e minúsculas.

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

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

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

Na linha de comando:

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

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

    
por 01.10.2015 / 17:56
0

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

    
por 01.10.2015 / 17:45
0

Veja as funções de string como este exemplo:

   set str=teh cat in teh hat  
   echo.%str%
   set str=%str:teh=the% 
   echo.%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: link

    
por 01.10.2015 / 18:04