В Bash я могу сделать что-то подобное
somecmd << END
a lot of
text here
END
кормить ввод команды напрямую из скрипта. Мне нужно сделать то же самое в пакетных файлах CMD.exe (сценарии .cmd). Является ли это возможным?
В Bash я могу сделать что-то подобное
somecmd << END
a lot of
text here
END
кормить ввод команды напрямую из скрипта. Мне нужно сделать то же самое в пакетных файлах CMD.exe (сценарии .cmd). Является ли это возможным?
Это просто, но не так чисто, как в Unix/Linux. Попробуй это:
(@echo.a lot of
@echo.text here
) | somecmd
Обратите внимание, что .
после выражения echo позволяет начинать строку с пробелов. Символ @
необходим для предотвращения отправки оператора echo в somecmd
. Вы можете удалить символ @
таким образом:
echo off
(echo.a lot of
echo.text here
) | somecmd
echo on
Я считаю, что вы можете использовать один символ ^
для каждой строки.
НАПРИМЕР:
echo This is a really long ^
text message that spans multiple ^
lines
возвращает:
C:\Users\Jonno>echo This is a really long ^
More? text message that spans multiple ^
More? lines
This is a really long text message that spans multiple lines
До сих пор я не нашел решения этой проблемы!
У меня есть только обходной путь в определении некоторых BAT-скриптов.
Используя мой скрипт, решение вашей проблемы выглядит следующим образом
call INIT-TRAMEX.bat
%assign-sysout% FILE.SYSOUT.TXT
%w% a lot of
%w% text here
somecmd <%sysout%
Но во всех случаях прямое косвенное обращение невозможно.
Файл INIT-TRAMEX.bat
определяет переменные %ASSIGN-SYSOUT%
и %W%
::******************************************************************************
::* INIT-TRAMEX.bat
::******************************************************************************
@echo OFF
set scriptdir=c:\Scripts
set ASSIGN-SYSOUT=call %scriptdir%\AssignSysout.bat
set WRITE-TEXT=call %scriptdir%\WriteText.bat
set W=call %scriptdir%\WriteText.bat
Сценарий ASSIGN-SYSOUT
определяет переменную %sysout%
и создает пустой файл.
Он содержит следующие строки
set sysout=%1
@echo.>%sysout%
del %sysout%
Скрипт WRITE-TEXT
содержит следующие строки
IF "%1"=="" goto line
echo %* >>%sysout%
goto quit
:line
echo. >>%sysout%
:quit
Используя эти советы, DOS-скрипт более читабелен.