[英]Windows - how to echo a line verbatim in a batch file?
我正在尋找從bat文件生成動態SAS文件的方法,以便可以從命令行傳遞一些變量。 我希望做到這一點,
echo //**$1** JOB 99999,'IMS-MXG',CLASS=3,REGION=100M, 00010026 > DETAIL_EXAMPLE
echo // MSGCLASS=Z,MSGLEVEL=(1,1),NOTIFY=&SYSUID 00020036 >> DETAIL_EXAMPLE
echo //JCLLIB JCLLIB ORDER=(SCBP.MXG.JCLLIB) 00030036 >> DETAIL_EXAMPLE
echo //MYSTEP EXEC MXGSAS,WORK='1500,500', 00040036 >> DETAIL_EXAMPLE
echo // OPTIONS='PRINT=REPORT SYSPARM="SITE=CA,ZONE=PRIME"' 00050036 >> DETAIL_EXAMPLE
echo //DETAIL DD DISP=SHR,DSN=**$2** 00060036 >> DETAIL_EXAMPLE
echo //REPORT DD SYSOUT=* 00070036 >> DETAIL_EXAMPLE
echo //SYSPRINT DD SYSOUT=* 00080036 >> DETAIL_EXAMPLE
echo //SYSIN DD * 00090036 >> DETAIL_EXAMPLE
echo OPTIONS LINESIZE=90 ERROR=1 PAGESIZE=32767 PAGENO=1 NUMBER NODATE 00100036 >> DETAIL_EXAMPLE
echo SYMBOLGEN NOLABEL MISSING='' COMPRESS=YES 00110036 >> DETAIL_EXAMPLE
echo OBS=MAX REPLACE FORMDLIM='-' FORMCHAR='|-,???+????+=|-/\<>*'; 00120036 >> DETAIL_EXAMPLE
echo 00130036 >> DETAIL_EXAMPLE
echo 00140036 >> DETAIL_EXAMPLE
echo DATA _NULL_; 00150036 >> DETAIL_EXAMPLE
得到這個
//**$1** JOB 99999,'IMS-MXG',CLASS=3,REGION=100M, 00010026
// MSGCLASS=Z,MSGLEVEL=(1,1),NOTIFY=&SYSUID 00020036
//JCLLIB JCLLIB ORDER=(SCBP.MXG.JCLLIB) 00030036
//MYSTEP EXEC MXGSAS,WORK='1500,500', 00040036
// OPTIONS='PRINT=REPORT SYSPARM="SITE=CA,ZONE=PRIME"' 00050036
//DETAIL DD DISP=SHR,DSN=**$2** 00060036
//REPORT DD SYSOUT=* 00070036
//SYSPRINT DD SYSOUT=* 00080036
//SYSIN DD * 00090036
OPTIONS LINESIZE=90 ERROR=1 PAGESIZE=32767 PAGENO=1 NUMBER NODATE 00100036
SYMBOLGEN NOLABEL MISSING='' COMPRESS=YES 00110036
OBS=MAX REPLACE FORMDLIM='-' FORMCHAR='|-,???+????+=|-/\<>*'; 00120036
00130036
00140036
DATA _NULL_; 00150036
但是,這就是我得到的,
//**$1** JOB 99999,'IMS-MXG',CLASS=3,REGION=100M, 00010026
//JCLLIB JCLLIB ORDER=(SCBP.MXG.JCLLIB) 00030036
//MYSTEP EXEC MXGSAS,WORK='1500,500', 00040036
// OPTIONS='PRINT=REPORT SYSPARM="SITE=XX,ZONE=PRIME"' 00050036
//DETAIL DD DISP=SHR,DSN=**$2** 00060036
//REPORT DD SYSOUT=* 00070036
//SYSPRINT DD SYSOUT=* 00080036
//SYSIN DD * 00090036
OPTIONS LINESIZE=90 ERROR=1 PAGESIZE=32767 PAGENO=1 NUMBER NODATE 00100036
SYMBOLGEN NOLABEL MISSING='' COMPRESS=YES 00110036
請注意第2、12、13和14行是如何丟失的。 我可能需要研究在第12行中轉義其中的某些字符,但其他幾行讓我不知道為什么它們不出現。
有沒有一種方法可以逐字回顯這些行?
首先十分感謝。
使用echo.
而不是echo
這樣可以保留您的前導空格,也可以保護您免受要回顯'@'
符號的情況的影響( echo@
...具有特殊的解釋,但echo。不會以'.'
開頭並且是安全的)
C:\Users\username>echo.// Some setting 00123567>some_file
C:\Users\username>echo.// Some other stuff 00123568>>some_file
C:\Users\username>echo. 00123569>>some_file
C:\Users\username>echo. 00123570>>some_file
C:\Users\username>more some_file
// Some setting 00123567
// Some other stuff 00123568
00123569
00123570
C:\Users\username>
@ECHO OFF
SETLOCAL
echo(//**$1** JOB 99999,'IMS-MXG',CLASS=3,REGION=100M, 00010026 > q36271044.txt
echo(// MSGCLASS=Z,MSGLEVEL=(1,1),NOTIFY=^&SYSUID 00020036 >> q36271044.txt
echo(//JCLLIB JCLLIB ORDER=(SCBP.MXG.JCLLIB) 00030036 >> q36271044.txt
echo(//MYSTEP EXEC MXGSAS,WORK='1500,500', 00040036 >> q36271044.txt
echo(// OPTIONS='PRINT=REPORT SYSPARM="SITE=CA,ZONE=PRIME"' 00050036 >> q36271044.txt
echo(//DETAIL DD DISP=SHR,DSN=**$2** 00060036 >> q36271044.txt
echo(//REPORT DD SYSOUT=* 00070036 >> q36271044.txt
echo(//SYSPRINT DD SYSOUT=* 00080036 >> q36271044.txt
echo(//SYSIN DD * 00090036 >> q36271044.txt
echo(OPTIONS LINESIZE=90 ERROR=1 PAGESIZE=32767 PAGENO=1 NUMBER NODATE 00100036 >> q36271044.txt
echo( SYMBOLGEN NOLABEL MISSING='' COMPRESS=YES 00110036 >> q36271044.txt
echo( OBS=MAX REPLACE FORMDLIM='-' FORMCHAR='^|-,???+????+=^|-/\^<^>*'; 00120036 >> q36271044.txt
echo( 00130036 >> q36271044.txt
echo( 00140036 >> q36271044.txt
echo(DATA _NULL_; 00150036 >> q36271044.txt
TYPE "q36271044.txt"
ECHO =====================================
DEL "q36271044.txt*" 2>NUL
(
echo(//**$1** JOB 99999,'IMS-MXG',CLASS=3,REGION=100M, 00010026
echo(// MSGCLASS=Z,MSGLEVEL=(1,1^),NOTIFY=^&SYSUID 00020036
echo(//JCLLIB JCLLIB ORDER=(SCBP.MXG.JCLLIB^) 00030036
echo(//MYSTEP EXEC MXGSAS,WORK='1500,500', 00040036
echo(// OPTIONS='PRINT=REPORT SYSPARM="SITE=CA,ZONE=PRIME"' 00050036
echo(//DETAIL DD DISP=SHR,DSN=**$2** 00060036
echo(//REPORT DD SYSOUT=* 00070036
echo(//SYSPRINT DD SYSOUT=* 00080036
echo(//SYSIN DD * 00090036
echo(OPTIONS LINESIZE=90 ERROR=1 PAGESIZE=32767 PAGENO=1 NUMBER NODATE 00100036
echo( SYMBOLGEN NOLABEL MISSING='' COMPRESS=YES 00110036
echo( OBS=MAX REPLACE FORMDLIM='-' FORMCHAR='^|-,???+????+=^|-/\^<^>*'; 00120036
echo( 00130036
echo( 00140036
echo(DATA _NULL_; 00150036
)>q36271044.txt
TYPE "q36271044.txt"
GOTO :EOF
兩種不同的處理方式(您沒有提到語法錯誤報告)
首先,重定向器和其他具有特殊含義的字符需要轉義,即|><&
需要前導^
。
在第二種中,有一種技術可以創建包含echo
輸出的文件,而無需永久附加。 語法
(
a series of statements
)>filename
創建文件, 但您也需要轉義)
因為它們都在括號內。
%
需要通過%
not ^
轉義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.