2015-09-12 1 views
1

Хорошо, у меня есть несколько строк в текстовом файле. Я хочу получить первую строку и сохранить ее в другом файле. Например, это текстовый файл:Как получить только первую строку текстового файла, записанного в новый текстовый файл с использованием командного файла?

put returns between paragraphs 
for linebreak add 2 spaces at end 
for linebreak add 2 spaces at end2 
for linebreak add 2 spaces at end3 

Я хочу put returns between paragraphs быть сохранены в другой файл.

Я использовал

for /f "tokens=" %%A in ('findstr /r "^[0-9][0-9]*$" <"C:\Users\Sherlock\Desktop\AbcImport\123.txt"') do echo 123>>1234.txt 
pause 

Но это не работает.

Как получить только первую строку текстового файла, записанного в новый текстовый файл, используя командный файл?

ответ

1

Вот пакетный код для записи только первой пустой/пустой строки текстового файла в другой текстовый файл.

@echo off 
for /F "usebackq delims=" %%I in ("InputTextFile.txt") do (
    echo %%I>"OutputTextFile.txt" 
    goto ContinueAfterLoop 
) 
:ContinueAfterLoop 

InputTextFile.txt является файл в текущем каталоге, содержащем первую строку для копирования.

OutputTextFile.txt - это файл, созданный в текущем каталоге с первой строкой из входного файла, скопированного в этот выходной файл.

Команда GOTO используется для выхода из цикла после обработки первой строки и продолжения командного файла ниже цикла.

Чтобы понять используемые команды и как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • echo /?
  • for /?
  • goto /?

Читайте также статью Microsoft о Using Command Redirection Operators.

+0

Это не сработает, если первая строка начинается с; или, если первая строка пуста (предполагая, что ОП хочет иметь пустую строку в качестве выхода) – dbenham

0

Вы можете использовать использовать следующую команду:

SetLocal EnableDelayedExpansion 
for /f "tokens=* delims=;" %%m in ("C:\Users\Sherlock\Desktop\AbcImport\123.txt") do (
    set /p FirstLine=<%%m 
    echo !FirstLine!>>1234.txt 
) 

и для нескольких файлов:

SetLocal EnableDelayedExpansion 
for %%a in ("*") do (
    for /f "tokens=* delims=;" %%m in ("%%a") do (
     set /p FirstLine=<%%m 
     echo !FirstLine!>>1234.txt 
    ) 
) 
3

Вариант 1 - SET/P: Это самый простой и быстрый чистого пакетного решения, при условии, строка не превышает 1021 байт, и она не заканчивается управляющими символами, которые должны быть сохранены. Размер файла не имеет значения - он всегда будет читать и писать первую строку очень быстро.

@echo off 
setlocal enableDelayedExpansion 
set "ln=" 
<"input.txt" set /p "ln=" 
>"output.txt" (echo(!ln!) 

Вариант 2 - FOR/F: Это будет работать с линиями до ~ длиной 8191 байт, но это может быть медленным, если файл действительно большой, поскольку цикл FOR/F должен прочитать весь файл прежде чем он обработает первую строку. Это решение в основном совпадает с ответом Mofi, за исключением того, что отключает параметр EOL, поэтому он никогда не игнорирует первую строку, независимо от того, что является первым символом.У него есть ограничение, что он будет пропускать пустые строки, так что технически это не дает правильный результат, если первая строка пуста:

@echo off 
for /f usebackq^ delims^=^ eol^= %%A in ("input.txt") do echo(%%A>"output.txt"&goto :break 
:break 

Существует способ, чтобы сохранить первую строку, если она пуста, используя чистый но я не стал бы беспокоиться. Я бы перешел к ...

Вариант 3 - JREPL.BAT или какое-либо другое непериодическое решение: Пакет очень плохо работает при манипулировании текстовыми файлами. Вам намного лучше использовать некоторые другие языки сценариев, такие как VBScript, JScript или Powershell. Или порт Windows любого количества утилит unix.

Я бы использовал JREPL.BAT - гибридную утилиту для обработки текстовых сообщений JScrpit/пакетного регулярного выражения, которая запускается изначально на любой машине Windows с XP и далее. Это слишком сложно для такой простой задачи, но это очень удобный, мощный и эффективный инструмент для вашего арсенала. После этого он может использоваться для многих задач обработки текста. Полная документация встроена в скрипт.

jrepl "^.*" "$&" /jendln "quit=true" /f "input.txt" /o "output.txt" 

Используйте CALL JREPL если поместить команду в пакетном сценарии.

+0

Спасибо за это очень хорошее резюме возможных решений. +1 один за мной. Строка – Mofi

0
rem Get the first line of a text file: 
set /P "line=" < "C:\Users\Sherlock\Desktop\AbcImport\123.txt" 
rem Write it into a new text file: 
echo %line%> 1234.txt 
+0

должна быть очищена перед чтением с помощью SET/P, и если строка содержит символы яда, потребуется отсроченное расширение. – dbenham

Смежные вопросы