为一个目录生成文件列表页面
echo off
set /p dirname="请输入目录名: "

dir %dirname% /b >filelist.tmp

setlocal enabledelayedexpansion
for /f "delims=" %%i in (filelist.tmp) do (
  set /a b+=1
  echo ^<li class="li-st"^>^<a href="%%i"^>%%i^<^/a^>^</li^> >>filelist.html.tmp
)

del filelist.tmp

echo 临时文件删除成功:filelist.tmp
echo 文件列表生成成功:filelist.html.tmp
set /p dirname="按任意键退出 ... ..."

 

读取带空格的行
for /f "delims=[" %%a in (tmp_filelist.txt) do (
cmd转义符 ^

 
获取当前目录

echo 当前路径是:%~dp0
::为了防止路径中有空格,一般加上"",无论在不在根目录下最后都有\
dir "%~dp0"
pause>nul 

 

判断是否存在传入参数

@echo off
set "p1=%~1"
if not defined p1 (
        echo not def
    ) else (
        echo def
    )

 

bat日期时间方面的陷阱

1、hour为个位数时前面没有自动补零,有些情况下会产生意想不到的麻烦,例如文件名:

2013-10-09_ 358.txt

给hour补0需要自己手工完成:

if %time:~0,2% leq 9 (
set CUR_HOUR=0%time:~1,1%
) else (
set CUR_HOUR=%time:~0,2%
)


2、有些系统设置的日期时间格式分隔符是/,这样如果将日期用到路径中,将会出现意料之外的状况

如:X:\2013-10-09\test

实际路径可能为:X:\2013/10/09\test

所以比较靠谱的提取日期的方式是:

set CUR_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%

分别提取日期的各部分值,然后自己决定用什么分隔符。