1

Сейчас я новичок в сценариях, но мне трудно понять команду "for" (особенно с этими токенами, разделителями и т.д.). Говоря так, я думаю, что команда может быть использована, чтобы делать то, что я делаю. Если это не так и есть более простой способ, игнорируйте мое невежество :(

Скажем, у меня есть несколько строк в текстовом файле abc.txt, каждая строка начинается и заканчивается "(кавычки) Например, файл из 3 строк

"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"

Как я могу обрезать каждую строку в кавычках до фиксированной длины, скажем, 30 или 50 или 100 символов (включая пробелы) Я хочу ввести количество символов в пакете, и он может обрезать соответствующим образом и создать файл def.txt с урезанным строки в кавычках.

Скажем, я ввожу 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"

Спасибо

PS Если вы используете For command, пожалуйста, объясните команду.

РЕДАКТИРОВАТЬ: Хотя предоставленный ответ работал, есть проблема с неанглийским текстом. Я получаю искаженный текст в выходном файле для неанглийского текста во входном файле. Любая помощь @barlop здесь - это неанглийский текст (1 строка)

"फाइल है इसको ना पढ़े आपको कोई मतलांब नही"

1 ответ1

3

Это делает это

@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%!^"
)

Итак, используя ваш пример, это в a.txt. Каждая строка начинается с кавычки, и есть пробелы, хотя это работает, если пробелов тоже нет.

"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"

И запускает пакетный скрипт

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>

Теперь я добавил две строки, чтобы сделать его вывод в файл 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 заявлений в CMD немного сложно. Чтобы понять это, просто начните с попытки написать оператор for, который печатает каждую строку файла, без обрезки, и используйте простой файл, такой как файл, с двумя строками abcdefg и hijklmn. Затем для оператора for /f %f in (a.txt) do @echo %f затем создайте его. Но это то, с чего вы начинаете, если вы хотите понять, как это сделать. Как только вы это сделаете, добавьте «delims =», чтобы увидеть, какой эффект он имеет (для просмотра эффекта вам может понадобиться несколько пробелов в строках файла). Затем посмотрите, как вы можете получить подстроку в пакетном режиме. set a = abcdefg echo% a:~ 0,2% (печатает ab).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .