[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 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=
那位大侠能解释一下原因么?

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

TOP

回复 2# DAIC
多谢.测试代码可以解决问题.  但这是什么原理?

TOP

0
1
2
是默认的句柄

TOP

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

TOP

回复 5# honey_liuyong


0-9是可以使用的句柄
0-2是默认的句柄

TOP

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
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

返回列表