Cmd добавить текст в конец файла

Обновлено: 03.07.2024

Иногда возникает желание зафиксировать результат выполнения команды в cmd . Как правило , такое желание возникает , когда текст не помещается в окно командной строки ( cmd ).

Синтаксис для записи результата выполнения команды простой .

Команда_с_ключами > путь_к_файлу имя_файла.txt

То есть вначале пишется команда со всеми ключами и параметрами , а сразу после последнего символа ставиться символ > потом пробел и пишется путь и имя файла , в который будет сохранен результат . Результат будет сохранен в файл без вывода на экран . Файл сохраняется в кодировке DOS-866.

Для примера , выполним команду ping itindustry-spb.ru с записью на диск D в файл ping.txt

Для этого в командной строке выполняем команду ping itindustry-spb.ru > D: ping.txt

Ниже показан результат выполнения этой команды

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

Часто возникает необходимость сохранить вывод из командной строки.

Способ № 1. Сохранения текста из командной строки в файл.

cmd запись в текстовый файл

Если после команды добавить >> и ввести адрес текстового документа, то результаты выполнения данной команды будут сохранены в этом файле.

Например, вводим ipconfig /all >> d:cmd.txt и жмем ввод для выполнения команды. После того как команда будет выполнена в текстовом файле cmd.txt на диске d: будут сохранены все результаты. При этом в текст будет закодирован с помощью кодировки IBM CP866. Поэтому для того чтобы его открыть придётся использовать сторонние приложения, например программу Akelpad.

Способ № 2. Сохранение текста из командной строки в буфер обмена.

cmd запись в текстовый файл

Например, вводим ipconfig /all | clip и жмем ввод для выполнения команды. Когда выполнение команды будет завершено, результаты будут помещены в буфер обмена. Для того чтобы воспользоваться этими результатами достаточно вставить текст в любом текстовом редакторе с помощью всем известной комбинации клавиш Cntrl+V.

Способ № 3. Скопировать текст из командной строки.

Последний способ позволяет сохранить не только результаты работы команды, но и всю остальную информацию из командной строки.

Чтобы это сделать кликаем правой кнопкой мышки по командной строке и вызываем контекстное меню. В открывшемся меню выбираем пункт «Пометить».

cmd запись в текстовый файл

После этого выделяем текст в командной строке с помощью мышки и нажимаем на клавишу Enter. После нажатия на Enter выделение исчезнет, а текст будет скопирован в буфер обмена.

Описание

Почитать о том, как сделать тоже самое в LinuxBSD системах можно в этой статье.

Другие статьи:

Комментарии:

У меня есть программа на Visual Studio C++ она выводит числа и текст,можно ли как-то сохранять все что выводит в текстовый документ?
Искал в интернете ничего не нашел про вывод в текстовый документ именно в C++.

Добрый день.
Тогда можно можно ещё и на ФТП грузить результат ?)

Не совсем понял про какие переменные для ping или systeminfo идет речь, поэтому лучше уточните, что именно вы хотите сделать.

ДА, лучше, благодарю. Напоследок, где поточнее можно почитать про другие переменные, которые может использовать тот же ping или systeminfo (нужно было для systeminfo), а то в хелпе к systeminfo описаны лишь несколько базовых операций, а про переменные ни слова.

А вам не проще будет использовать имена компьютеров в имени файлов отчета? Для этого используйте переменную %COMPUTERNAME% в названии файла, в который идет сохранение, например:

Подскажите, а как можно сохранять файл отчета с новыми номерами, чтобы они шли по порядку друг за другом?
То есть, я сохраняю файл отчета, то же самое проделывается на других машинах и все сохраняется в одну папку с одинаковым именем файла (потому что сделано через bat), как сделать, чтобы файл нумеровался и не заменялся.

Что подразумевается под общим диском? Если сетевой диск, то у него должна быть конкретная буква, под которой он смонтирован в системе, и нужно проделать все то же самое, о чем написано в статье:

ping 8.8.8.8 > Z: est.txt

Используя приведенный ниже код, я добавляю текст в конец имен файлов:

но он изменился на:

3 ответа 3

Вы можете добавить текст в конец любого имени файла (до первой точки, которая обычно является началом расширения), используя последовательность символов ? это по крайней мере столько, сколько оригинальное имя.

? жадно совпадает и сохраняет любой символ, кроме . и может ничего не совпадать, если в нем нет символов. Ваш текст затем добавляется, а затем .* Соответствует и сохраняет точку и оставшуюся часть имени.

Вы можете изменить исходную маску файла так, как считаете нужным, чтобы соответствовать любым файлам, которые вы хотите. Исходная маска полностью независима от маски переименования.

Если некоторые из ваших файлов содержат более одного . в имени, тогда вы не можете использовать одну простую команду REN. Одним из вариантов является использование пакетного сценария:

Обратите внимание, что важно использовать FOR /F, а не простой FOR. FOR /F собирает весь результат команды DIR перед началом итерации, тогда как простой FOR начинает выполнять итерацию после заполнения внутреннего буфера, что повышает риск переименования одного и того же файла несколько раз.

Я использую EOL=: для защиты от удаленной возможности, с которой начинается имя файла ; , EOL по умолчанию является ; , который игнорирует строки, начинающиеся с ; , Имена файлов не могут содержать : поэтому для параметра EOL это безопасный символ.

Один небольшой недостаток FOR /F с DIR /B - это то, что он не сохраняет информацию о пути, поэтому я использовал PUSHD в начале. Без PUSHD вы могли бы включить информацию о пути в команду DIR, но тогда вам также нужно будет включить путь в маску источника REN. Следующая строка работает в командной строке (без пакетного скрипта):

Альтернативой является использование команды FINDSTR для вывода списка файлов, который удобно сохраняет информацию о пути:

Поскольку каждый указанный файл начинается с буквы диска, можно использовать EOL=; по умолчанию ; ,

Последний вариант - вы можете использовать мою утилиту переименования регулярных выражений JREN.BAT. Это чистый скрипт (гибридный JScript/batch), который работает на любом компьютере с Windows начиная с XP.

Поскольку JREN является пакетным скриптом, вам нужно будет использовать CALL JREN, если вы используете команду в другом пакетном скрипте.

1 EXIT /b for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "А=а" "Б=б" "В=в" "Г=г" "Д=д" "Е=е" "Ж=ж" "З=з" "И=и" "К=к" "Л=л" "М=м" "Н=н" "О=о" "П=п" "Р=р" "С=с" "Т=т" "У=у" "Ф=ф" "Х=х" "Ц=ц" "Ч=ч" "Ш=ш" "Щ=щ" "Ь=ь" "Ы=ы" "Ъ=ъ" "Э=э" "Ю=ю" "Я=я") do ( call set %

ЗАМЕНА ОДНОЙ ПОДСТРОКИ НА ДРУГУЮ В ФАЙЛЕ

В результате, в папке, где будет запущен приведенный выше текст, создастся файл sbs2.com.
Возможно, вы будете приятно удивлены его размером - 659 БАЙТ!
Те, кому вышеприведенные изыски кажутся излишними, могут скачать готовую утилиту здесь.
Использование:
sbs2.com 0 "Old String" "New String" < infile > outfile
Осуществляется замена всех вхождений Old String на New String в файле infile. Результат запишется в файл outfile.

Такую задачу можно решить без использования сторонних программ, только средствами bat !
Ниже приведен пример с использованием локальной процедуры txtrepl

setlocal ENABLEDELAYEDEXPANSION echo off call :txtrepl end finish C:\1\24i.bat C:\1\24i.ba1 pause exit :txtrepl rem param - find, repl, from, to set FINDTXT=%1 set REPLTXT=%2 if EXIST %3 ( set FILEFROM=%3 ) else ( echo error. Not found file %3 pause exit ) set FILEOUT=%4 set COUNT=0 for /F "tokens=*" %%n in (!FILEFROM!) do ( set /A COUNT=!COUNT!+1 set LINE=%%n set TMPR=!LINE:%FINDTXT%=%REPLTXT%! if !COUNT! == 1 ( Echo !TMPR!>!FILEOUT! ) else ( Echo !TMPR!>>!FILEOUT! ) ) exit /b rem end of proc

Вывод на экран, в файл текста без перевода строки

В bat/cmd командах не предусмотрена возможность вывода данных без перевода строки. Но для решения такой задачи можно использовать некую уловку.
Команда set с параметром, предусматривающим ввод данных с экрана, позволяет вывести подсказку для ввода без перевода строки. Вот этим мы и воспользуемся.
<nul set /p a=text В данном случае, слово text (а здесь может быть и переменная) будет выведено но экран без перевода строки. Значение переменной a при этом не будет изменено (если это для вас важно).
Соответственно, для вывода текста в файл без перевода строки используется конструкция:
<nul set /p a=text>b.txt

Использование этого приема в сочетании с символом backspace (код 08) позволяет сделать вывод на экран изменяемого текста и как вариант - "вращающейся палки".

Вычисление длины строковой переменной

В bat/cmd командах нет функции, позволяющей вычислять длину строковой переменной. А такая задача возникает не так уж и редко. Однако средств командного языка достаточно, для того что бы решить такую задачу, не прибегая к использованию специальных программ. Рассмотрим несколько вариантов решения данной задачи:

1 :startvarcount if not defined var exit /b set var=%var:

1% set /a %2+=1 goto startvarcount exit /b

set st=abcdefghijklmnopqrstuvwxyz . call :var_сount2 %st% count2 echo %count2%

Еще один вариант вычисления длины строковой переменной:

:StringLen :: ----------------------- :: Нахождение длины строки :: ----------------------- :: %1 - текстовая строка :: ----------------------- Set $StringLen=0 Set $StringBuf=%

1" GoTo :EOF :StringLenLoop Set /A $StringLen+=1 Call Set $StringChr=%%$StringBuf:

%$StringLen%%% If ""=="%$StringChr%" GOTO :EOF GoTo :StringLenLoop

Еще один способ определения длины строки, как ни странно - достаточно быстрый:

n0.tmp" For %%i In ("%TEMP%\%

n0.tmp") Do Set /A z=%%

Ну и, наконец, решение, поразившее меня своей математической лаконичностью:

:strLen string len -- returns the length of a string :: -- string [in] - variable name containing :: the string being measured for length :: -- len [out] - variable to be used :: to return the string length :: Many thanks to 'sowgtsoi', but also 'jeb' :: and 'amel27' dostips forum :: users helped making this short and efficient :$created 20081122 :$changed 20101116 :$categories StringOperation :$source http://www.dostips.com ( SETLOCAL ENABLEDELAYEDEXPANSION set "str=A!%

1!"&rem keep the A up front to ensure we rem get the length and not the upper bound rem it also avoids trouble in case of empty string set "len=0" for /L %%A in (12,-1,0) do ( set /a "len|=1%<<%%A" for %%B in (!len!) do ^ if "!str:

1<<%%A" ) ) ( ENDLOCAL & REM RETURN VALUES IF "%

set "string=12345678901234 " call :strLen string len echo len=%len%

Для себя я так же использую метод половинного деления для нахождения количества символов в строке. Эта процедура менее изящна, и, возможно, потребует несколько большего времени для вычислений, чем приведенная выше, но, на мой взгляд, она понятнее. (В этом месте надо было похвалить себя еще, но что-то не нашлось достойных эпитетов)
Привожу на всякий случай и эту процедуру ))

@echo off setlocal ENABLEEXTENSIONS SetLocal EnableDelayedExpansion set "string=123456789012345678901" call :strLen string len echo len=%len% pause exit :strLen string len :: - string [in] - variable name containing the string :: -- len [out] - variable to be used to return the string length SETLOCAL ENABLEDELAYEDEXPANSION set /a nn=10 & rem max length string = 2^^nn. rem If nn=10 - max length=1024 set /a mmin=0 set /a mmax=1"<<"%nn% set "str=Q!%1!" for /L %%A in (%nn%,-1,1) do ( set /a BB = ^(!mmin! + !mmax!^) ">>" 1 call set sim=%%str:

!BB!,1%% if "!sim!" == "" ( set /a mmax=!BB!) else ( set /a mmin=!BB! ) ) ENDLOCAL & SET /a %

2=%mmin% EXIT /b %mmin%

Получение подстроки.

Если смещение начала подстроки и ее длина являются константами - здесь все достаточно просто и аналогичный пример рассматривался выше:

Прошу прощения, если в качестве значения переменной str я опубликовал чей-то пароль )).
Если же одна или обе эти величины - переменные, то решение будет не столь простое.
Здесь встретиться возможно не совсем обычное применение команды CALL. Немного глубже об этом на странице Полезное в разделе Особенности использования команды CALL. Там же рассмотрен и этот пример.
Итак, рассмотрим возможные решения:

SetLocal EnableDelayedExpansion set str=123qwerty456 set n1=3 set n2=6 Set d2=!str:

Или как вариант предыдущего

setlocal ENABLEEXTENSIONS SetLocal EnableDelayedExpansion set str=zaq12wsx set n1=3 set n2=6 call :SUBSTRING str,%n1%,%n2% echo %SUBD% . :SUBSTRING set SUBD=!%1:

Удаление ведущих и замыкающих пробелов.

:ALLTRIM :: ----------------------- :: Krasner B. :: ----------------------- :: %1 - var with txt string :: ----------------------- SetLocal EnableDelayedExpansion set /a firstnoblank=-1 set /a lastnoblank=0 set /a curpos=1 set "str=Q!%1!" :StringLenLoop set SUBD=!str:

%curpos%,1! if "!SUBD!" == "" GoTo :formrez if NOT "!SUBD!" == " " ( if !firstnoblank! == -1 set firstnoblank=!curpos! set lastnoblank=!curpos! ) set /a curpos = !curpos!+1 GoTo :StringLenLoop :formrez set /a n1=!firstnoblank!-1 set /a n2=!lastnoblank!-!firstnoblank!+1 if !firstnoblank! == -1 (set "rez primer"> set "strr=" Call :ALLTRIM strr echo result ALLTRIM ^>%strr%^< . set "strrr= 22 33 " Call :ALLTRIM strrr echo result ALLTRIM ^>%strrr%^<

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Новый раздел о средствах командной строки в рамках этого же проекта расположен здесь

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

но он изменен на:

как добавить текст в конец несколько имен файлов.

перед: 1.МР3 2.в mp3

после: 1text.МР3 2text.в mp3

в вашем пакетном файле есть несколько ошибок, например:

  • *.mp2 должно быть *.mp3
  • goto E - метка :E отсутствует.
  • вам не нужно call ничего.

простой рабочей партии файл

  • пакетный файл будет работать с любой длиной имени файла, так например, 12345.mp3 будет переименовать в 12345text.mp3

cmd Shell решение

вам не нужно использовать пакетный файл. Вы можете просто использовать:

обратите внимание, что после не работы:

вы получите имена, как 1.mp3text.mp3 С этой команды.

Читать Далее

    - отличный справочник для все окон УМК линия, связанная. - условно выполнить команду для нескольких файлов. - аргумент командной строки (или параметр) - это любое значение, переданное в пакет сценарий.

вы можете добавить текст в конец имени файла (до первой точки, которая обычно в начале расширения) с помощью серии ? это, по крайней мере, столько, сколько оригинальное имя.

? жадно сопоставляет и сохраняет любой символ за исключением . , и может ничего не соответствовать, если у него закончатся символы. Ваш текст затем добавляется, а затем .* матчи и сохраняет точку и остаток имя.

вы можете изменить маску исходного файла, как вы считаете нужным, чтобы соответствовать любые файлы, которые вы хотите. Маска источника полностью независима от маски переименования.

если некоторые из ваших файлов содержат более одного . в имени, то вы не можете использовать простую команду REN в одиночку. Одним из вариантов является использование пакетного скрипта:

Примечание. что очень важно использовать for / F, а не просто FOR. FOR / F собирает весь результат команды DIR перед началом итерации, тогда как simple FOR начинает итерацию после заполнения внутреннего буфера, что добавляет риск переименования одного и того же файла несколько раз.

я использую EOL=: для защиты от удаленной возможности, что имя файла начинается с ; . EOL по умолчанию ; , который игнорирует строки, начинающиеся с ; . Имена файлов не могут contain : , поэтому он является безопасным для параметра Эол.

один из незначительных недостатков FOR /F с DIR / B заключается в том, что он не сохраняет информацию о пути, поэтому я использовал PUSHD в начале. Без PUSHD вы могли бы включить информацию о пути в команду DIR, но тогда вам также нужно было бы включить путь в маску источника REN. Следующая строка работает в командной строке (без пакетного сценария):

альтернативой является использование Команда FINDSTR для вывода списка файлов, которая удобно сохраняет информацию о пути:

так как каждый файл в списке начинается с буквы диска, безопасно использовать значение по умолчанию EOL=; .

один последний вариант - вы могли бы использовать мой JREN.BAT регулярное выражение переименовать утилиту. Это чистый скрипт (hybrid JScript / batch), который изначально работает на любой машине Windows, начиная с XP.

С JREN-это пакетный скрипт, вы бы необходимо использовать вызов JREN, если вы используете команду в другом пакетном сценарии.

Читайте также: