none
CMD/BAT Команда ECHO RRS feed

  • Вопрос

  • Задача - создать файл из cmd скрипта

    @echo off
    
    set PATH1=error:\data.txt
    set PATH2=d:\data.txt
    set /a error=0
    set DATA=^
    line1 ^
    line2 ^
    line3
    
    echo Creating %PATH1%
    (echo %DATA% 1>%PATH1% 2>nul) && set /a error=0 || set /a error=1
    echo errorLevel= %errorLevel%
    echo error= %error%
    if %error% equ 0 (
    	type %PATH1%
    )
    echo.
    echo Creating %PATH2%
    (echo %DATA% 1>%PATH2% 2>nul) && set /a error=0 || set /a error=1
    echo errorLevel= %errorLevel%
    echo error= %error%
    if %error% equ 0 (
    	type %PATH2%
    )
    pause
    

    Выдаёт следующие

    Creating error:\data.txt
    Синтаксическая ошибка в имени файла, имени папки или метке тома.
    errorLevel= 0
    error= 1
    
    Creating d:\data.txt
    errorLevel= 0
    error= 0
    line1 line2 line3
    Для продолжения нажмите любую клавишу . . .

    Вопросы:

    1. Можно ли подавить вывод ошибки ECHO (Синтаксическая ошибка в имени файла, имени папки или метке тома.)?

    2. Почему выполнение ECHO не влияет на %errorLevel%?

    3. Возможно ли создать многострочный файл одной командой ECHO?

Ответы

  • "Подавить" ошибку нельзя, надо просто ее не допускать ее. Например, надо указать верный путь вместо неверного "error:\data.txt". Если путь водится пользователем, то его следует проверить на правильность и выдать сообщение об ошибке если кто то напечатает неверный путь.

    Команда еcho никогда не отказывает и нужды выставлять/проверять код нет. Отказ у вас происходит в другой части скрипта где вы использовали заведомо неверный путь для переназначения вывода.

    Для создания файла с несколькими строками можно использовать команду for. Строки при этом должны быть разделены запятыми. То что вы использовали на деле создает одну строку. Кроме того если требуется то файл следует перед выводом удалить или очистить.

    @echo off

    set output=correct_file_name.txt

    set data=line1,line2,line2

    for %%l in (%data%) do echo %%l>>%output%


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор

Все ответы

  • cmd принципиален? ms придумал и внедрил замену в виде powershell который намного проще и функциональней cmd

    The opinion expressed by me is not an official position of Microsoft

    Модератор
  • cmd принципиален? ms придумал и внедрил замену в виде powershell который намного проще и функциональней cmd

    The opinion expressed by me is not an official position of Microsoft

    К сожалению принципиален
  • "Подавить" ошибку нельзя, надо просто ее не допускать ее. Например, надо указать верный путь вместо неверного "error:\data.txt". Если путь водится пользователем, то его следует проверить на правильность и выдать сообщение об ошибке если кто то напечатает неверный путь.

    Команда еcho никогда не отказывает и нужды выставлять/проверять код нет. Отказ у вас происходит в другой части скрипта где вы использовали заведомо неверный путь для переназначения вывода.

    Для создания файла с несколькими строками можно использовать команду for. Строки при этом должны быть разделены запятыми. То что вы использовали на деле создает одну строку. Кроме того если требуется то файл следует перед выводом удалить или очистить.

    @echo off

    set output=correct_file_name.txt

    set data=line1,line2,line2

    for %%l in (%data%) do echo %%l>>%output%


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор
  • "Подавить" ошибку нельзя, надо просто ее не допускать ее. Например, надо указать верный путь вместо неверного "error:\data.txt". Если путь водится пользователем, то его следует проверить на правильность и выдать сообщение об ошибке если кто то напечатает неверный путь.

    Команда еcho никогда не отказывает и нужды выставлять/проверять код нет. Отказ у вас происходит в другой части скрипта где вы использовали заведомо неверный путь для переназначения вывода.

    Для создания файла с несколькими строками можно использовать команду for. Строки при этом должны быть разделены запятыми. То что вы использовали на деле создает одну строку. Кроме того если требуется то файл следует перед выводом удалить или очистить.

    @echo off

    set output=correct_file_name.txt

    set data=line1,line2,line2

    for %%l in (%data%) do echo %%l>>%output%


    This posting is provided "AS IS" with no warranties, and confers no rights.

    спасибо