去除某字符为首的行和空行

现有文件 aaa.txt 内容如下

line 1
第一行第一列 第一行第二列 第一行第三列
line 2
第二行第一列 第二行第二列 第二行第三列
line 3
第三行第一列 第三行第二列 第三行第三列

现在需要把 line1 、 line2 、 line3 为首的行和空行去掉, bat 脚本如下

@echo off
for /f "eol=l tokens=*" %%i in (aaa.txt) do echo %%i >> tmp.txt
copy tmp.txt bbb.txt
del tmp.txt

生成的 bbb.txt 内容如下

第一行第一列 第一行第二列 第一行第三列
第二行第一列 第二行第二列 第二行第三列
第三行第一列 第三行第二列 第三行第三列

行转列

现有一批文件格式如下

第一行第一列 第一行第二列 第一行第三列
第二行第一列 第二行第二列 第二行第三列

现在需要把所有文件更改为一列, bat 脚本如下

@echo off
title 数据文件行转列小程序
color 2f
echo.
date /t
echo ======================================================================
echo =====           本程序仅用于将文本数据转成一列              =====
echo ======================================================================
echo.
echo.
:begin
 set /p name=请输入文件后缀名:(如 txt dat ) 
 echo.
for /f "delims=" %%a in ('dir/b/a-d *.%name%')do (echo. &echo 正在处理%%a & set/a n+=1 & echo.
  (for /f "usebackq delims=" %%i in ("%%a") do for %%k in (%%i) do echo.%%k) > temp
     move temp "%%a" )
set /a c=0+n
echo.	
echo =====本次任务共遍历 %cd% 内的 %c% 个文件!======
echo.
echo.
goto begin

效果如下

第一行第一列
第一行第二列
第一行第三列
第二行第一列
第二行第二列
第二行第三列

更改文件名

现有一批文件名类似 yl201501.txt 、 yl201502.txt 、 yl201503.txt ,现在想要把所有文件名中的 yl 更改为 TX , bat 脚本如下

@echo off
setlocal enabledelayedexpansion
for %%i in (yl*) do (
set "str=%%i"
ren "%%i" "!str:yl=TX!")

输出昨天的日期

@echo off
rem 获取昨天日期
set YE=%date:~0,4%
set MO=%date:~5,2%
set DA=%date:~8,2%
set DG=1
set/a vY1=%YE% %% 400
set/a vY2=%YE% %% 4
set/a vY3=%YE% %% 100
if %vY1%==0 (set var=true) else (if %vY2%==0 (if %vY3%==0 (set var=false) else (set var=true)) else (set var=false))
set LY=%YE%
set LM=%MO%
if %MO:~0,1%==0 (set MO=%MO:~1,1%)
if %DA:~0,1%==0 (set DA=%DA:~1,1%)
if %DA% GTR %DG% (set/a LD=%DA%-%DG%) else (
if %MO%==1 (set/a LY=%YE%-1) & (set/a LM=12+%MO%-1) & (set/a LD=31+%DA%-%DG%) else (
set/a LM=%MO%-1
if %MO%==3 (if %var%==false (set/a LD=28+%DA%-%DG%) else (set/a LD=29+%DA%-%DG%))
for %%a in (2 4 6 8 9 11) do (if "%MO%"=="%%a" (set/a LD=31+%DA%-%DG%))
for %%b in (5 7 8 10 12) do (if "%MO%"=="%%b" (set/a LD=30+%DA%-%DG%))))
if %LM% LSS 10 set LM=0%LM:~-1%
if %LD% LSS 10 set LD=0%LD:~-1%
set Han=
set Han=%LY%%LM%%LD%
echo 昨天的日期为:%Han%

输出明天的日期

@echo off
set mydate=20091231
:a
set YE=%mydate:~0,4%
set MO=%mydate:~4,2%
set DA=%mydate:~6,2%
echo 当天日期为:%mydate%
set/a vY1=%YE% %% 400
set/a vY2=%YE% %% 4
set/a vY3=%YE% %% 100
if %vY1%==0 (set var=true) else (if %vY2%==0 (if %vY3%==0 (set var=false) else (set var=true)) else (set var=false))
set LY=%YE%
set LM=%MO%
if %MO:~0,1%==0 (set MO=%MO:~1,1%)
if %DA:~0,1%==0 (set DA=%DA:~1,1%)

if %MO%==2  (
    if %DA%==28	(if %var%==false (set LD=1) &(set LM=3) else (set/a LD=1+%DA%))
    if %DA%==29 (set LD=1) &(set LM=3)
    if %DA% LSS 28  (set/a LD=1+%DA%)     )
	
if %MO%==12 (if %DA%==31 (set LD=1) & (set LM=1) & (set /a LY=%YE%+1) else (set/a LD=1+%DA%))

for %%a in (1 3 5 7 8 10) do (if "%MO%"=="%%a" (if "%DA%"==31 (set /a LM=%MO%+1) & (set LD=1) else (set /a LD=%DA%+1)))
for %%b in (4 6 9 11) do (if "%MO%"=="%%b" (if "%DA%"==30 (set /a LM=%MO%+1) & (set LD=1) else (set /a LD=%DA%+1)))
if %LM% LSS 10 set LM=0%LM:~-1%
if %LD% LSS 10 set LD=0%LD:~-1%
set mydate=%LY%%LM%%LD%
echo 下一天的日期为:%mydate%

计算日期差

@echo off
::日期时间差
set /p date1=输入开始日期(如1984-2-22 5:11:3):
set /p date2=输入结束日期(如2013-9-18 5:6:31):
for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date1%") do ((set Y1=%%i) && (set M1=%%j) && (set D1=%%k) && (set H1=%%l) && (set F1=%%m) && (set S1=%%n) && (set MS1=%%o))
for /f "tokens=1,2,3,4,5,6,7 delims=-/:. " %%i in ("%date2%") do ((set Y2=%%i) && (set M2=%%j) && (set D2=%%k) && (set H2=%%l) && (set F2=%%m) && (set S2=%%n) && (set MS2=%%o))
set /a secs=((d2-32075+1461*(y2+4800+(m2-14)/12)/4+367*(m2-2-(m2-14)/12*12)/12-3*((y2+4900+(m2-14)/12)/100)/4)*86400+H2*3600+F2*60+S2)-((d1-32075+1461*(y1+4800+(m1-14)/12)/4+367*(m1-2-(m1-14)/12*12)/12-3*((y1+4900+(m1-14)/12)/100)/4)*86400+H1*3600+F1*60+S1)
set /a D=secs/86400,H=(secs%%86400)/3600,M=(secs%%3600)/60,S=secs%%60
echo.&echo.%date1%与%date2%之间相隔:%D%天%H%时%M%分%S%秒

在右键菜单中添加 bat

@echo off
reg add HKCR\.bat\ShellNew /v nullfile /f >nul
reg add HKCR\batfile /ve /d 新建bat /f >nul