我正在寻找从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行中的一些角色,但其他一些线条让我对他们为什么没有出现感到无能为力。
有没有办法逐字回复这些行?
非常感谢。
答案 0 :(得分:0)
在Windows 7上的批处理文件中尝试了这个,它显示了所有的空格。您使用的是哪个版本的Windows?你确定那些是空格或标签吗?
答案 1 :(得分:0)
使用echo.
代替echo
这将保留你的领先空白,并且还可以保护你免受你想要回复'@'
符号的情况(echo@
...有特殊解释,但echo。不会预先设置{ {1}}并且是安全的)
'.'
答案 2 :(得分:0)
@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
ed输出的文件而无需永久附加。语法
(
a series of statements
)>filename
创建文件但您还需要转义)
,因为它都在括号内。
%
需要%
而非^
转义。