Пакетный скрипт для обрезки строк в тексте только до первых 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 строка)
"फाइल है इसको ना पढ़े आपको कोई मतलांब नही"
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% (отпечатки АБ).
Другие вопросы batch command-line script