Script para modificar o conteúdo do arquivo em arquivos especificados

1

Eu tentei pesquisar perguntas anteriores, mas nenhuma delas funcionou ou não consegui adaptá-las às minhas necessidades.

Eu quero escrever um script que peça:

  • pasta
  • critérios
  • string antiga
  • nova string

E substitua cada arquivo na pasta especificada e nas subpastas (e force o usuário a digitar um) com critérios específicos (por exemplo, deve ser um arquivo ".cue" e:

  1. Se o arquivo for somente leitura, desative-o.
  2. Pesquise a cadeia de caracteres antiga especificada no conteúdo do arquivo e substitua-a por nova cadeia e salve as alterações no mesmo arquivo .
  3. Se o arquivo foi somente leitura, ative-o novamente.

Eu tenho esse código até agora, mas não sei o que fazer na parte do :

@echo off 

setLocal enableDELAYedexpansion

:START
set "var2="
set /P var2="type folder "

if "%var2%"=="" goto ERROR

set /p old="old string ? "
set /p new="new string ? "
set /p files="what criteria ? "
echo modifying files...

for /r "%var2%" %%v in (%%files) do (

???

)
pause

goto START

:ERROR
echo type something!!
goto START
    
por Ruben 22.09.2013 / 15:16

1 resposta

2

Use FOR / F com DIR / B / S / A-D-R para obter arquivos que não possuem o sinalizador somente leitura.

Em seguida, use um dos vários métodos publicados para modificar um arquivo de texto. Eu prefiro usar um utilitário JScript / batch híbrido chamado REPL.BAT que executa uma pesquisa em regex e substitui stdin e grava o arquivo resultado para stdout. É um script nativo puro que roda em qualquer máquina Windows moderna do XP em diante - nenhum executável de terceiros é necessário. A documentação completa está incorporada no script.

A opção L causa uma pesquisa literal, e a opção V obtém a pesquisa e substitui os valores das variáveis em vez dos literais de string.

Assumindo o REPL.BAT na sua pasta atual, ou melhor ainda, em algum lugar dentro do seu caminho:

@echo off
setlocal

:START
set "var2="
set /P var2="type folder "

if "%var2%"=="" goto ERROR

set /p old="old string ? "
set /p new="new string ? "
set /p files="what criteria ? "

for /f "delims=" %%F in ('dir /b /s /a-d-r "%var2%\%files%" 2^>nul') do (
  echo modifying %%F
  type "%%F" | repl old new lv >"%%F.new"
  move /y "%%F.new" "%%F" >nul
)

pause

exit /b

:ERROR
echo type something!!
goto START
    
por 23.09.2013 / 00:36