
[已解決]【隨機(jī)排序】批處理標(biāo)簽中變量延遲失效的困惑以下是一個(gè)對(duì)文本進(jìn)行隨機(jī)排序的代碼,但在代碼之中,“echo %random% %%a”沒有獲得一個(gè)動(dòng)態(tài)的隨機(jī)數(shù),而是變成了一個(gè)固定的數(shù)字。具體地說,我想用“!random!”獲得動(dòng)態(tài)時(shí)間,但發(fā)現(xiàn)“setlocal enabledelayedexpansion”已經(jīng)失效。而且,這個(gè)標(biāo)簽開頭還得額外加上“@echo off”,實(shí)在令人郁悶。諸位有寫過變量函數(shù)的,是否曾經(jīng)遇到過此問題,請(qǐng)求解釋。以下去掉setlocal enabledelayedexpansion毫無大礙,但去掉標(biāo)簽中的@echo off則出現(xiàn)問題。似乎里面無法使用變量延遲。問題可能是我用括號(hào)將代碼括起之后使用了sort,而直接調(diào)用會(huì)提示批腳本不能調(diào)用外部程序標(biāo)簽。
-
- @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
nclick="copycode($('code0'));">復(fù)制代碼
==================================================看來偷懶是不行的,下了決心去攻克,問題終于解決了。隨機(jī)排序完整代碼:
-
- @echo off
- ::把文本中的行(段落)打亂順序,進(jìn)行隨機(jī)排序。用了一個(gè)cmd代替臨時(shí)文件,用了兩個(gè)for。變量延遲方面稍有困難。
- call:sorttxt E:Batchtest.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
nclick="copycode($('code1'));">復(fù)制代碼