本帖最后由 CrLf 于 2012-12-23 04:43 编辑
一直想用一次 more 命令的 /t 开关,终于让我碰上了,邪恶:- @echo off&setlocal enabledelayedexpansion
- set "文件名前缀=test_"
- ::上面这行设置处理后的文件所使用的前缀为 test_,如果无需前缀就删掉这行
- set "制表符= "
- ::这句设置制表符变量为制表符,如果被论坛处理为空格,请自行替换(建议不要选中复制,而使用复制代码可保留代码中的制表符)
- set "分隔符=@"
- ::这句设置临时的列分隔符为 @,可视情况设置为其他不存在于文本中的字符
- for %%a in (20 30 50 40 20) do set /a n+=1,m+=%%a&set "项目!n!=!m!"
- ::这句设置各个项目的长度,如例 20、30、50、40、20 分别对应5列(或6列的前五列)
- set /a n-=1
-
- setlocal disabledelayedexpansion
- (for /f "delims=" %%a in ("%~1
- ) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo !str: =%分隔符%!
- endlocal
- ))>$1
- ::将文本中的空格处理为 @,用于逐列处理时加以区分
-
- for /l %%a in (1 1 %n%) do (
- (for /f "tokens=1* delims=%分隔符%" %%b in ($1) do echo %%b%制表符%%%c)>$2
-
- setlocal enabledelayedexpansion
- more>$1 /t!项目%%a! $2
- endlocal
- )
- endlocal
- ::逐列将分隔符替换为制表符,再用 more /tn 将制表符处理为一定长度的空格
-
- (move $1 "%~dp1%文件名前缀%%~nx1"&del $2)>nul
- ::收工
- pause
复制代码
|