Пакетный скрипт для обрезки строк в тексте только до первых 30 или 50 символов

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

скажем, у меня есть несколько строк в текстовом файле 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"

спасибо

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

EDIT:
Хотя ответ, предоставленный работал, есть проблема с английским текстом. Я получаю искаженный текст в выходном файле для неанглийского текста во входном файле . Любая помощь @barlop
вот неанглийский текст (1 строка)

"फाइल है इसको ना पढ़े आपको कोई मतलांब नही"
10
задан SuperUserMan
20.12.2022 5:47 Количество просмотров материала 2654
Распечатать страницу

1 ответ

вот это

@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=", посмотрите, какой эффект он имеет(Вам могут понадобиться пробелы в строках файла, чтобы увидеть эффект). Затем посмотрите, как можно получить подстроку в пакете. установить=abcdefg эхо %в:~0,2% (отпечатки АБ).

3
отвечен barlop 2022-12-21 13:35

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх