2

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

somecmd << END
a lot of 
text here
END

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

3 ответа3

3

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

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

НАПРИМЕР:

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
0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .