簡體   English   中英

Windows-如何在批處理文件中逐字回顯行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM