以下是一个对文本进行随机排序的代码,但在代码之中,“echo %random% %%a”没有获得一个动态的随机数,而是变成了一个固定的数字。具体地说,我想用“!random!”获得动态时间,但发现“setlocal enabledelayedexpansion”已经失效。而且,这个标签开头还得额外加上“@echo off”,实在令人郁闷。诸位有写过变量函数的,是否曾经遇到过此问题,请求解释。
以下去掉setlocal enabledelayedexpansion毫无大碍,但去掉标签中的@echo off则出现问题。似乎里面无法使用变量延迟。问题可能是我用括号将代码括起之后使用了sort,而直接调用会提示批脚本不能调用外部程序标签。-
- @echo off
- call :sorttxt
- pause
-
- :SortTxt
- (@echo off
- for /f "tokens=*" %%a in (a.txt) do (
- setlocal enabledelayedexpansion
- echo %random% %%a
- endlocal
- )
- )|sort
- goto :eof
复制代码 ==================================================
看来偷懒是不行的,下了决心去攻克,问题终于解决了。随机排序完整代码:-
- @echo off
- ::把文本中的行(段落)打乱顺序,进行随机排序。用了一个cmd代替临时文件,用了两个for编辑。变量延迟方面稍有困难。
-
- call :sorttxt E:\Batch\test.txt
- pause
- exit
-
- :SortTxt
- for /f "tokens=1*" %%i in ('cmd /v:on /c "@echo off&for /f "usebackq tokens^=*" %%a in ("%1") do (echo ^!random^! %%a)"^|sort') do echo %%j
- goto :eof
复制代码
|