Подача многострочного ввода (здесь документы) командам в сценариях cmd.exe

В Bash я могу сделать что-то подобное

somecmd << END
a lot of 
text here
END

кормить ввод команды напрямую из скрипта. Мне нужно сделать то же самое в пакетных файлах CMD.exe (сценарии.cmd). Является ли это возможным?

3 ответа

Решение

Я считаю, что вы можете использовать один ^ символ для каждой строки.

НАПРИМЕР:

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

Это просто, но не так чисто, как в 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

До сих пор я не нашел решения этой проблемы!

У меня есть только обходной путь в определении некоторых 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-скрипт более читабелен.

Другие вопросы по тегам