Script em lote para aparar linhas no texto apenas nos primeiros 30 ou 50 caracteres

1

Agora sou novo em scripts, mas acho difícil entender o comando "for" (especialmente com os tokens e delimitadores, etc.). Dizendo isso, acho que para o comando pode ser usado para fazer o que estou fazendo. Se não é e há um caminho mais fácil, ignore minha ignorância: (

Digamos que eu tenha várias linhas em um arquivo de texto abc.txt com cada linha começando e terminando com "(aspas) Por exemplo. um arquivo de 3 linhas

"hey what is going on @mike220. I am working on your car. Its engine is in very bad condition" 
"Because if you knew, you'd get shredded and do it with certainty"
"@honey220 Do you know someone who has busted their ass on a diet only for results to come to a screeching halt after a few weeks"

Como posso aparar cada linha, entre aspas, para um tamanho fixo, digamos 30 ou 50 ou 100 caracteres (incluindo espaços) Eu quero inserir o número do caractere em lote e ele pode aparar de acordo e produzir um arquivo def.txt com linhas aparadas entre aspas.

Digamos que eu digite 50, os resultados do exemplo acima devem ser

"hey what is going on @mike220. I am working on you"
"Because if you knew, you'd get shredded and do it"
"@honey220 Do you know someone who has busted their"

Obrigado

P.S. Se você usar o comando, por favor, explique o comando.

EDITAR: Embora a resposta fornecida tenha funcionado, há um problema com o texto não em inglês. Estou recebendo texto truncado no arquivo de saída para texto não inglês no arquivo de entrada. Qualquer ajuda @barlop aqui está o texto não original (1 linha)

"फाइल है इसको ना पढ़े आपको कोई मतलांब नही"
    
por SuperUserMan 18.08.2014 / 13:38

1 resposta

3

Isso faz isso

@echo off

setlocal enableextensions enabledelayedexpansion

set /p num=Enter chars to show between quotes: 
set /a num=%num%+1

for /f "delims=" %%f in (a.txt) do (
set a=%%f

echo !a:~0,%num%!^"
)

Então, usando o seu exemplo, está em a.txt Então, cada linha começa com uma citação e também há espaços, embora funcione se não houver espaços também.

"hey what is going on @mike220. I am working on your car. Its engine is in very bad condition" 
"Because if you knew, you'd get shredded and do it with certainty"
"@honey220 Do you know someone who has busted their ass on a diet only for results to come to a screeching halt after a few weeks"

E executando o script em lote

C:\blah>a.bat
Enter chars to show between quotes: 3
"hey"
"Bec"
"@ho"

C:\blah>a.bat
Enter chars to show between quotes: 50
"hey what is going on @mike220. I am working on you"
"Because if you knew, you'd get shredded and do it "
"@honey220 Do you know someone who has busted their"

C:\blah>

Eu adicionei agora duas linhas, para torná-lo a saída para um arquivo def.txt

@echo off


setlocal enableextensions enabledelayedexpansion

del def.txt 2>nul


set /p num=Enter chars to show between quotes: 
set /a num=%num%+1

for /f "delims=" %%f in (a.txt) do (
set a=%%f

echo !a:~0,%num%!^"
echo !a:~0,%num%!^" >>def.txt
)


C:\crp\dlsnex>a
Enter chars to show between quotes: 2
"he"
"Be"
"@h"

C:\crp\dlsnex>type def.txt
"he"
"Be"
"@h"

C:\crp\dlsnex>

for declarações em cmd são um pouco complicadas. Para entender isso, basta começar a escrever uma instrução for que imprima todas as linhas de um arquivo, sem aparar, e use um arquivo simples como um com duas linhas abcdefg e hijklmn. Então, para a declaração for /f %f in (a.txt) do @echo %f , você a constrói. Mas é aí que você começa, se quiser descobrir como fazer isso. Depois de ter isso, adicione o "delims=" ver o efeito que tem (você pode precisar de alguns espaços nas linhas do arquivo, para ver o efeito). Em seguida, observe como você pode obter uma substring em lote. defina a = abcdefg echo% a: ~ 0,2% (imprime ab).

    
por 18.08.2014 / 15:54