localize e substitua o texto em um arquivo de texto (incluindo espaços!)

4

Eu tenho usado F.A.R.T e um lote simples para editar um arquivo txt com a saída do comando net use:

no meu arquivo de texto que precisa mudar com frequência, tenho um caminho definido changeme \ software \ sql

no uso da rede em lote mostra a localização de uma pasta compartilhada na rede de trabalho \ server \ shared

Eu "marquei" isso na janela do CMD e colei no prompt de entrada do usuário

o FART substituirá changeme por \ server \ shared para completar completamente \ servidor \ compartilhado \ software \ sql

isso tem funcionado um tratamento, até hoje, onde havia um espaço no caminho para o compartilhado

\ server \ shared area

e o FART não entende espaços e quebra com erros e coisas da sintaxe. Eu olhei em todos os interruptores e nenhum parece me deixar substituir o texto por um espaço nele.

Existe uma maneira melhor de fazer isso, melhor ferramenta, visto poder shell é bom, mas eu não sei quais versões estou indo para chegar, então poderia ser mais problema alterar os códigos para atender as versões.

Pergunto eu posso fazer isso puramente em lote sem peidar. Muito obrigado

echo.
type "%~dp0logo.txt"
echo.
echo.
echo F| XCOPY "%~dp0Software\client.txt" /y "%~dp0DSoftware\config.cfg" 
net use
pause
set /p N=enter shared:
"%~dp0Software\fart" -i -r "%~dp0Software\config.cfg" \changeme %N%
    
por Tika9o9 23.11.2015 / 18:16

2 respostas

0

POWERSHELL

Exemplo de sintaxe do PowerShell abaixo para localizar e substituir strings em um arquivo específico.

EXEMPLO

(Get-Content "C:\Users\user\Desktop\testtestzzz.txt") | 
Foreach-Object {$_.replace("\changeme", "\server\share name")} | 
Set-Content "C:\Users\user\Desktop\test\testzzz.txt"

Recursos:

F.A.R.T

Para o problema F.A.R.T com espaços especificamente, acho que você só precisa adicionar aspas duplas em torno das strings que está passando para ele. Dê uma chance e, em seguida, talvez você possa continuar a usá-lo sem mais alterações.

EXEMPLO

"%~dp0Software\fart" -i -r "%~dp0Software\config.cfg" "\changeme" "%N%"

Você também pode adicionar a opção capital -V (veja o exemplo abaixo) para obter detalhes detalhados da mensagem de erro, se necessário, para solucionar problemas adicionais, mas resolvi esse problema com FART e espaço em uma string de substituição, adicionando as aspas duplas em torno dele, como no meu exemplo abaixo # 2.

Exemplo # 2

fart -i -C -V "C:\Users\user\Desktop\test\testzzz.txt" "\changeme" "\server\share name"

Você também pode considerar excluir a opção -r se estiver alterando apenas o texto em um arquivo SINGLE (por exemplo, config.cfg). Abaixo estão as opções FART /? que eu vejo explicando as opções.

Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

Options:
 -h, --help          Show this help message (ignores other options)
 -q, --quiet         Suppress output to stdio / stderr
 -V, --verbose       Show more information
 -r, --recursive     Process sub-folders recursively
 -c, --count         Only show filenames, match counts and totals
 -i, --ignore-case   Case insensitive text comparison
 -v, --invert        Print lines NOT containing the find string
 -n, --line-number   Print line number before each line (1-based)
 -w, --word          Match whole word (uses C syntax, like grep)
 -f, --filename      Find (and replace) filename instead of contents
 -B, --binary        Also search (and replace) in binary files (CAUTION)
 -C, --c-style       Allow C-style extended characters (\xFF
(Get-Content "C:\Users\user\Desktop\testtestzzz.txt") | 
Foreach-Object {$_.replace("\changeme", "\server\share name")} | 
Set-Content "C:\Users\user\Desktop\test\testzzz.txt"
\t\n\r\ etc.) --cvs Skip cvs dirs; execute "cvs edit" before changing files --svn Skip svn dirs --remove Remove all occurences of the find_string -a, --adapt Adapt the case of replace_string to found string -b, --backup Make a backup of each changed file -p, --preview Do not change the files but print the changes
    
por 25.11.2015 / 09:26
0

Tente isso no Windows PowerShell.

    (Get-Content "C:\Users\user\Desktop\test.txt") | 
Foreach-Object {$_.replace("find what", "replace what")} | 
Set-Content "C:\Users\user\Desktop\test\test.txt"

isso é 100% trabalho para mim.

    
por 05.04.2018 / 12:22

Tags