Board logo

标题: [文本处理] 批处理转义字符和重定向怎样把百分号写入文件? [打印本页]

作者: cc5511    时间: 2010-12-25 12:29     标题: 批处理转义字符和重定向怎样把百分号写入文件?

我想要的是把批处理把这行语句执行完后,
在C盘创建一个"123.bat",
里面的内容为:"set hour=%time:~1,1%",

把下面这行命令在CMD中运行后能成功,C盘能生成一个"123.bat"并且里面的内容也是"set hour=%time:~1,1%",(第二个百分号前加了一个转义字符,不然重定向出来就不是"%time:~1,1”)
echo set hour=%time:~1,1^% >c:\123.bat

问题来了,只要把这行命令放到批处理中,那重定向符号仿佛没起到作用,
屏幕上会显示:set hour=time:~1,1\123.bat



请大家帮忙看一看   希望知道解决方法的人赐教一下  非常感谢!

  1. @echo off
  2. echo set hour=%time:~1,1^% >c:\123.bat
  3. pause
复制代码

作者: broly    时间: 2010-12-25 12:52

  1. @echo off
  2. >c:\123.bat echo set hour=^%time:~1,1^%
  3. pause
复制代码

作者: cc5511    时间: 2010-12-25 12:59     标题: 非常感谢

真是高手哇!
请问像我那样为什么不会成功啊?是错在哪里了?
作者: broly    时间: 2010-12-25 13:02     标题: 回复 3楼 的帖子

> 这个符号,用echo 现实,如果前面数字是1 2 等,就会出错
  1. echo 2>test.txt
复制代码
改为
  1. >test.txt echo 2
复制代码
就不会
作者: cc5511    时间: 2010-12-25 13:40     标题: 晕了 我的问题又来了 又有新问题了

想要在文本里写入“if %hour% leq 6”,最后“%hour%”显示不出来
显示:if  leq 6   而不显示:if %hour% leq 6

这样不行:
  1. @echo off
  2. >123.txt echo if %hour% leq 6
  3. start 123.txt
复制代码


这样也不行:
  1. @echo off
  2. echo if %hour% leq 6 >123.txt
  3. start 123.txt
复制代码



请赐教啊!感谢你!
作者: broly    时间: 2010-12-25 14:24

在所有%前面添加转义符^
作者: Batcher    时间: 2010-12-25 15:56     标题: 回复 5楼 的帖子

  1. @echo off
  2. >123.txt echo if %%hour%% leq 6
  3. start 123.txt
复制代码

作者: cc5511    时间: 2010-12-25 16:46     标题: 非常感谢!

问题全部解决了!感谢!
作者: hanyeguxing    时间: 2010-12-25 17:22

如果要将批处理内容输出到文件,而且内容很多,推荐使用for /f:
  1. @echo off
  2. (for /f "delims=" %%a in ('more +3^<"%~f0"') do echo.%%a)>c:\123.bat
  3. pause&exit
  4. @echo off&setlocal ENABLEDELAYEDEXPANSION
  5. rem 测试用
  6. set a=1&set b=%time:~0,1%
  7. echo %b%|find /i "123"
  8. set/a a=!a!+1
  9. echo %a%
  10. pause
复制代码
ps:在主代码部分开变量延迟时,需要对输出内容中的!做转义^




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