首页  编辑  

批处理一些小技巧汇总

Tags: /计算机文档/脚本,批处理/   Date Created:

批处理一些小技巧

统计批处理传入的参数个数(不包含argc 0):
set argC=0
for %%x in (%*) do Set /A argC+=1
echo 参数个数为 %argC%
批处理中,时间变量自动补前导0,例如晚上0点到10点前是空格的,不是前导0的:
获取当前时间 set now=%time:~0,2%-%time:~3,2%-%time:~6,2%
批处理时间变量自动补0: %time: =0%

获取当前日期:
set today=%date:~0,4%-%date:~5,2%-%date:~8,2%
echo %today%
字符串替换中使用变量:
REM 启用变量延迟,用于使用%ROOT%变量来替换web_dir变量中的字符串
set ROOT=C:\demo\test
set web_dir=C:\demo\test\abc\def
setlocal enabledelayedexpansion
set web_dir=!web_dir:%ROOT%\=/!
set web_dir=%web_dir:\=/%
web_dir 输出为 /abc/def ,上面的代码必须在批处理里面使用,保存test.bat即可运行

获取目录下的文件名保存到变量或者循环处理:
for /f "delims=" %%A in ('dir /b "%dest%\*.mp4"') do set video_file=%%A
批处理运行命令并获取命令的结果输出(支持多行文本),下面代码保存批处理文件再运行即可:
windows - Batch - Store command output to a variable (multiple lines) - Stack Overflow
setlocal EnableDelayedExpansion
set LF=^

REM The two empty lines are required here
set "output="
for /F "delims=" %%f in ('dir /b') do (
    if defined output set "output=!output!!LF!"
    set "output=!output!%%f"
)
echo !output!
批处理文件中,set变量如果字符串有&符号,需要用^转义例如:
http://server/push^&type=1^&action=upload 字符串赋值,应该写成:
set url=http://server/push^&type=1^&action=upload
计算一个目录下的文件总数:
set filecount=0 & for %%f in ("%dest%\*.jpg") do @(set /a filecount+=1 > nul)
echo %filecount%
如果在批处理if () for ()等子过程内嵌套,要处理代码的返回结果,需要用!errorlevel!来获取结果:
command
if %errorlevel%==0 (
  command
  if !errorlevel! equ 0 (
     command
  )
)
wget 下载文件内容直接输出到屏幕的方法,以便可以管道重定向等,利用 -O - 选项就可以了:
wget 将结果直接输出到终端 wget -O - 就可以了
增加一些随机等待时间:
timeout /t %random:~1,1% /nobreak