上篇说的是本人在实现报表自动化过程中用到的VBS知识,这篇我打算用来总结在此过程中用到的批处理知识。
批处理里面如何实现延时?
rem 巧妙地利用windows自带的ping命令来达到延时的目的
ping.exe /n 1 127.1>nul
批处理的用户输入校验模块 [这里是校验日期,格式:yyyymm]
@echo off
:input_module
echo Please enter date here:
set /p yyyymm=^<format:yyyymm^> (example:201301):
echo %yyyymm%|findstr ^[1-2][0-9][0-9][0-9][0-1][0-9]$>nul
if not %errorlevel%==0 goto input_module
echo ^[*INFO*^]:
ping.exe /n 1 127.1>nul
对以上用户输入做操作:字符串截取、字符串拼接的用法:
set yyyymm = %yyyymm:~0,6%
if %yyyymm:~4,2% == 01 set month_display=JAN%yyyymm:~0,4%
批处理中用户名、密码输入模块
rem 用户输入ftpUserID及ftpPass模块
echo ^[*INFO*^]: Please enter ID & Password
ping.exe /n 1 127.1>nul
set /p ftpUser=^[*INFO*^]: Enter TSO ID:
批处理中著名的实现隐藏用户输入密码的方法
rem 批处理里面很著名的隐藏输入不显示的方法(By德国人HerbertKleebauer)
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com
set /p ftpPass=^[*INFO*^]: Enter your password:<nul
for /f "tokens=*" %%i in ('in.com') do set ftpPass=%%i
del in.com
批处理中实现执行批量ftp命令的方法
rem 设置远程ftp的ip
set ftpIP=xxx.xxx.xxx.xxx
rem 设置本地目录为当前脚本所在目录,用%~dp0表示
set LocalFolder=%~dp0
rem 指定临时ftp指令文件,将job送往mainframe 的JES2队列运行,并且提前删除以下两个dataset。
set ftpFile=%temp%\TempFTP.txt
>"%ftpFile%" (
echo open %ftpIP%
echo user %ftpUser%
echo %ftpPass%
echo lcd "%LocalFolder%"
echo ascii
echo quote site filetype=jes
echo put my_jes2_job.txt
echo disconnect
echo bye
)
rem 调用ftp.exe执行上述ftp命令,来完成将my_jes2_job送入到mainframe执行的操作
start c:\windows\system32\ftp.exe -n -s:"%ftpFile%"
批处理中判断文件是否为空的方法,以及goto分支的用法
for /f "delims=" %%i in ('dir /b my_test_source.txt') do (
if %%~zi equ 0 (
goto empty_source rem goto process empty
) else (
goto not_empty_source rem goto process not empty
)
)
:empty_source
do something here
:not_empty_source
do something here
批处理中调用msgbox显示消息框的方法
rem 利用mshta,消息框里面换行用^&chr(13)^
mshta vbscript:msgbox("Empty !"^&chr(13)^&^chr(13)^&"Please Check!",50,"Error")(window.close)
批处理中拷贝文件的方法
copy A.txt B.txt>nul
批处理中执行vbs脚本的方法
rem ftpUser和yyyymm是传递给vbs的参数
start wscript process_not_empty.vbs %ftpUser% %yyyymm%
Comments !