Batch: procure a string para pular as linhas acima e gravar os resultados no novo arquivo
Escrevi com sucesso um script que usa uma string para pesquisar em um arquivo específico e, em seguida, gera a linha onde ocorre pela primeira vez, e pego esse valor em um loop for e ignora a análise desse número de linhas e grava seu conteúdo para um novo arquivo. No entanto, não recebo linhas em branco que considero bastante problemáticas de resolve
A string que estou procurando é "/]", armazena em cache o número da linha onde ocorre e depois o acumula em uma variável com separação por vírgula. Depois, levo essa variável para um loop for novamente e recupero o primeiro valor que ocorre como variável final "ignore este número de linhas", que eu uso no loop for inferior que lê esse arquivo novamente e grava seus valores em um novo arquivo e pula esse número de linhas no início do arquivo.
Então, aqui está a parte do script que faz o que estou descrevendo acima:
setlocal enabledelayedexpansion
setlocal enableextensions
set live_svn_access_file=c:\csvn\data\conf\svn_access_file
set of=c:\test.txt
for /f "Tokens=1 Delims=:" %%i in ('findstr /n /c:"/]" %live_svn_access_file%') do (
rem cache value in a variable
set line=%%i
rem accumulate data to one variable
if defined line set skip=!skip!, !line!
)
rem strip first two characters in variable ", "
set skip=!skip:~2!
rem strip everything except first value in array
for /f "Tokens=1 Delims=," %%i in ('echo !skip!') do (
rem store value in a variable
set skip=%%i
)
rem calculate lines - 1 (arithmetic)
set /a skip=!skip!-1
set skip=!skip!
if not defined skip set error=Could not automatically find which parts to skip from live svn_access_file && goto error-handler
for /f "Tokens=* Delims= Skip=%skip%" %%i in (%live_svn_access_file%) do (
rem cache value in a variable
set read-input=%%i
rem write and append content of variable to output-file
echo !read-input! >> %of%
)
Reescrevi o script para coincidir com o que está funcionando, este é o script alterado:
setlocal enabledelayedexpansion
setlocal enableextensions
set live_svn_access_file=c:\csvn\data\conf\svn_access_file
set of=c:\test.txt
for /f "Tokens=1 Delims=:" %%i in ('findstr /n /r /c:"\[..*\]" %live_svn_access_file%') do (
rem cache value in a variable
set line=%%i
rem accumulate data to one variable
if defined line set skip=!skip!, !line!
)
rem take the 2nd sections linenumber into a variable, skipping the first [*foo*]
for /f "Tokens=2 Delims=," %%i in ('"echo !skip!"') do (
rem store value in a variable
set skip=%%i
)
rem add 1 line to skip from retrieved value
set /a skip=!skip!-1
rem verify that number of lines to skip has been successfully retrieved, if not go to error-handler
if not defined skip set error=Could not automatically find which parts to skip from live svn_access_file && goto error-handler
if ["%skip%"] LSS ["1"] set error=Number of lines to skip was less than 1, this will most likely fail && goto error-handler
rem read live svn_access_file, but skip X-lines and write to output-file
setlocal DisableDelayedExpansion
for /f "usebackq Delims= Skip=%skip%" %%i in (`"findstr /n ^^ %live_svn_access_file%"`) do (
rem cache value in a variable
set read-input=%%i
rem write and append content of variable to output-file
setlocal EnableDelayedExpansion
rem strip line number prefix
set read-input=!read-input:*:=!
rem write read lines to output-file
echo(!read-input!>>%of%
endlocal
)