Board logo

标题: [文件操作] BAT批处理怎样echo输出set到其他文件? [打印本页]

作者: honey_liuyong    时间: 2014-1-9 18:04     标题: BAT批处理怎样echo输出set到其他文件?

  1. set jobFile=changeJobPwd.bat
  2. echo @echo off>%jobFile%
  3. echo set test=1>>%jobFile%
  4. echo SETLOCAL ENABLEDELAYEDEXPANSION>>%jobFile%
  5. echo set taskname^=0>>%jobFile%
  6. echo set runas=0>>%jobFile%
  7. echo set status=0>>%jobFile%
  8. echo set fl=0>>%jobFile%
  9. echo for /f "tokens=1-2 delims=:" %%%%i in ('schtasks /query /v /fo list') do (>>%jobFile%
  10. echo if "%%i"=="TaskName" (>>%jobFile%
  11. echo set taskname=%%%%j>>%jobFile%
  12. echo )>>%jobFile%
  13. echo if "%%i"=="Scheduled Task State" (>>%jobFile%
  14. echo set status=%%%%j>>%jobFile%
  15. echo )>>%jobFile%
  16. echo if "%%i"=="Run As User" (>>%jobFile%
  17. echo set runas=%%%%j>>%jobFile%
  18. echo echo !taskname! !runas! !status!^>^>%%fl%%>>%jobFile%
  19. echo )>>%jobFile%
  20. echo )>>%jobFile%
  21. echo for /f "tokens=1-3 delims= " %%%%1 in (%%fl%%) do (>>%jobFile%
  22. echo for /f "delims=/" %%%%5 in (%%%%2) do (>>%jobFile%
  23. echo if %%%%6 == %os_id% and %%%%3 == "Enabled" (>>%jobFile%
  24. echo schtasks /change /tn %%%%1 /rp %%new_pwd_str%%>>%jobFile%
  25. echo )>>%jobFile%
  26. echo )>>%jobFile%
  27. echo )>>%jobFile%
  28. echo ENDLOCAL>>%jobFile%
  29. pause
复制代码
这段代码是用bat生成另外一个bat.
  1. echo set taskname^=0>>%jobFile%
  2. echo set runas=0>>%jobFile%
  3. echo set status=0>>%jobFile%
  4. echo set fl=0>>%jobFile%
复制代码
这段代码没办法生成到changeJobPwd.bat.
  1. echo set test=1>>%jobFile%
复制代码
只能输出set test=
那位大侠能解释一下原因么?
作者: DAIC    时间: 2014-1-9 21:52

  1. >>%jobFile% echo set taskname^=0
  2. >>%jobFile% echo set runas=0
  3. >>%jobFile% echo set status=0
  4. >>%jobFile% echo set fl=0
复制代码

作者: honey_liuyong    时间: 2014-1-10 09:51

回复 2# DAIC
多谢.测试代码可以解决问题.  但这是什么原理?
作者: DAIC    时间: 2014-1-10 09:56

0
1
2
是默认的句柄
作者: honey_liuyong    时间: 2014-1-10 13:56

回复 4# DAIC
我测试了一下如果写成 echo set test=[0-9] >>file.txt
就无法输出到文件. 如果变成两位数或者字符就可以.
作者: DAIC    时间: 2014-1-11 14:03

回复 5# honey_liuyong


0-9是可以使用的句柄
0-2是默认的句柄
作者: PowerShell    时间: 2014-1-11 16:33

powershell祖师爷用智慧,为我们创造了【无需在原始字符串中插入转义符,不破坏原始字符串可读性】的【文本处理】的妙法!  -----------这句话转自本人拙作  http://www.bathome.net/thread-27666-1-2.html

这个拙作你要是看了,你绝不会再想用bat生成bat!而会想用powershell生成任何代码!任何文本!

-------------------------分割线-------------------------------
powershell代码
  1. $aaa =
  2. @'
  3. @echo off
  4. set test=
  5. SETLOCAL ENABLEDELAYEDEXPANSION
  6. set taskname=0
  7. set runas=0
  8. set status=0
  9. set fl=0
  10. for /f "tokens=1-2 delims=:" %%i in ('schtasks /query /v /fo list') do (
  11.         if "%i"=="TaskName" (
  12.                 set taskname=%%j
  13.         )
  14.         if "%i"=="Scheduled Task State" (
  15.                 set status=%%j
  16.         )
  17.         if "%i"=="Run As User" (
  18.                 set runas=%%j
  19.                 echo !taskname! !runas! !status!>>%fl%
  20.         )
  21. )
  22. for /f "tokens=1-3 delims= " %%1 in (%fl%) do (
  23.         for /f "delims=/" %%5 in (%%2) do (
  24.                 if %%6 ==  and %%3 == "Enabled" (
  25.                         schtasks /change /tn %%1 /rp %new_pwd_str%
  26.                 )
  27.         )
  28. )
  29. ENDLOCAL
  30. '@
  31. Out-File  bbb.bat   -InputObject $aaa   -Encoding ansi
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2