Ваш вопрос не ясен. Обеспечение ввода и вывода образцов - это хорошо, но вы также должны объяснить свои требования.
Я предполагаю, что у вас есть несколько столбцов с разделителями в каждой строке, и вы хотите сохранить первые два столбца каждой строки. Я также предполагаю, что ширина столбцов является переменной, даже если в вашем примере только один символ на столбец.
Ваш код сохраняет только первый столбец. Нетрудно сохранить второе:
@echo off
setlocal
for /f "tokens=1,2 delims=:" %%A in (paste_here.txt) do >>check.txt echo %%A:%%B
Но есть потенциальная проблема - она потерпит неудачу, если отсутствует второй столбец. Например,
a::c:d:e:f
даст
a:c
потому что последовательные разделители обрабатываются FOR /F как один разделитель.
Это не сложно исправить, но это требует некоторых продвинутых методов пакетной обработки.
Вы можете сохранить всю строку во внешнем цикле и использовать поиск / замену, чтобы заключить каждый столбец в кавычки. Затем можно использовать второй цикл для анализа столбцов и модификатор ~
для удаления кавычек во время вывода.
Отложенное расширение требуется для работы с переменными, которые установлены и раскрыты в одном и том же цикле.
Задержка расширения включается и выключается для защиты !
это может появиться в содержании. Для переменного содержимого с !
будет поврежден, если он будет расширен, пока включено отложенное расширение.
Синтаксис нечетной опции во внешнем операторе FOR / F - это способ отключить опцию EOL и установить для DELIMS ничего, чтобы он сохранял всю строку независимо от содержимого.
Также обратите внимание, что более эффективно (быстрее) использовать круглые скобки и перенаправлять один раз для всего файла, а не один раз на строку.
@echo off
setlocal disableDelayedExpansion
>check.txt (
for /f delims^=^ eol^= %%A in (paste_here.txt) do (
set "ln=%%A"
setlocal enableDelayedExpansion
set "ln="!ln::=":"!""
for /f "tokens=1,2 delims=:" %%B in ("!ln!") do echo %%~B:%%~C
endlocal
)
)
Или вы можете использовать гибридную утилиту JScript/batch REPL.BAT, чтобы очень эффективно выполнить вашу задачу за один шаг. REPL.BAT выполняет поиск / замену регулярных выражений в stdin и записывает результат в стандартный вывод. Это чистый скрипт, который будет работать на любой машине с Windows начиная с XP.
type paste_here.txt | repl "^(.*?:.*?):.*" $1 >check.txt