找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 89511|回复: 26

[文本处理] [已解决]批处理如何修改文本中内容?

[复制链接]
发表于 2011-10-31 14:52:25 | 显示全部楼层 |阅读模式
本帖最后由 pdp320921 于 2011-11-2 22:06 编辑
  1. <?xml version="1.0" encoding="UTF-16"?>
  2. <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  3.   <RegistrationInfo>
  4.     <Date>2011-10-28T20:41:25</Date>
  5.     <Author>3-14</Author>
  6.   </RegistrationInfo>
  7.   <Triggers>
  8.     <TimeTrigger>
  9.       <Repetition>
  10.         <Interval>PT2M</Interval>
  11.         <StopAtDurationEnd>false</StopAtDurationEnd>
  12.       </Repetition>
  13.       <StartBoundary>2011-10-28T20:41:00</StartBoundary>
  14.       <Enabled>true</Enabled>
  15.     </TimeTrigger>
  16.   </Triggers>
  17.   <Principals>
  18.     <Principal id="Author">
  19.       <RunLevel>LeastPrivilege</RunLevel>
  20.       <UserId>3-14-PC\3-14</UserId>
  21.       <LogonType>InteractiveToken</LogonType>
  22.     </Principal>
  23.   </Principals>
  24.   <Settings>
  25.     <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
  26.     <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
  27.     <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
  28.     <AllowHardTerminate>true</AllowHardTerminate>
  29.     <StartWhenAvailable>false</StartWhenAvailable>
  30.     <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
  31.     <IdleSettings>
  32.       <StopOnIdleEnd>true</StopOnIdleEnd>
  33.       <RestartOnIdle>false</RestartOnIdle>
  34.     </IdleSettings>
  35.     <AllowStartOnDemand>true</AllowStartOnDemand>
  36.     <Enabled>true</Enabled>
  37.     <Hidden>false</Hidden>
  38.     <RunOnlyIfIdle>false</RunOnlyIfIdle>
  39.     <WakeToRun>false</WakeToRun>
  40.     <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
  41.     <Priority>7</Priority>
  42.   </Settings>
  43.   <Actions Context="Author">
  44.     <Exec>
  45.       <Command>C:\Users\3-14\AppData\Local\Temp\ac.bat</Command>
  46.     </Exec>
  47.   </Actions>
  48. </Task>
复制代码
文本如上

我想把
  1.    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
  2.        <stopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
复制代码
改成
  1.       <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
  2.   <stopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
复制代码
试了几次for没成功,头疼

哪位大侠指点下!
感激!

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-10-31 16:25:11 | 显示全部楼层

  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do (
  3.    if "%%i" equ "    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>" (
  4.       echo     ^<StopIfGoingOnBatteries^>true^</StopIfGoingOnBatteries^>&echo.
  5.       ) else (
  6.       if "%%i" equ "    <AllowHardTerminate>true</AllowHardTerminate>" (
  7.             echo     ^<AllowHardTerminate^>true^</AllowHardTerminate^>&echo.
  8.             ) else (
  9.             echo %%i&echo.
  10.             )
  11.    )
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
pdp320921 + 1 乐于助人

查看全部评分

发表于 2011-10-31 18:41:34 | 显示全部楼层
回复 2# lvsehuaxue
echo %%i&echo.
这句会死得很惨啊,原文中那么多的"<"和">"。

评分

参与人数 1PB +3 收起 理由
CrLf + 3 乐于助人

查看全部评分

发表于 2011-10-31 19:13:39 | 显示全部楼层
回复 3# weichenxiehou
我试了,可以的。你亲自试一试不就知道了!
发表于 2011-10-31 20:16:08 | 显示全部楼层
回复 4# lvsehuaxue
果然,我武断地以为for在迭代出echo %%i时会把<>认为是重定向符号,原来不会。。。很奇怪,单独执行echo <123>就会出错,看来for/f会自动地过滤掉一些特殊字符。
发表于 2011-10-31 21:58:00 | 显示全部楼层
  1. sed -e "s#<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>#<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>#" -e "s#<AllowHardTerminate>false</AllowHardTerminate>#<AllowHardTerminate>true</AllowHardTerminate>#" a.txt >b.txt
复制代码
 楼主| 发表于 2011-11-1 09:48:19 | 显示全部楼层
回复 4# lvsehuaxue


    我试了还是不可以啊!
发表于 2011-11-1 10:11:22 | 显示全部楼层
回复 7# pdp320921


哪里不可以?
发表于 2011-11-1 10:17:00 | 显示全部楼层
  1. @echo off
  2. (for /f "delims=" %%i in ('type a.txt') do (
  3.     if "%%i" equ "    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>" (
  4.         echo     ^<StopIfGoingOnBatteries^>true^</StopIfGoingOnBatteries^>
  5.         echo,
  6.     ) else (
  7.         if "%%i" equ "    <AllowHardTerminate>true</AllowHardTerminate>" (
  8.             echo     ^<AllowHardTerminate^>true^</AllowHardTerminate^>
  9.             echo,
  10.         ) else (
  11.             echo %%i
  12.             echo,
  13.         )
  14.    )
  15. ))>b.txt
复制代码
 楼主| 发表于 2011-11-1 12:44:43 | 显示全部楼层
回复 8# Batcher

贴上附件...

其实我是想把a.xml文件
   <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
中的true换成false
   <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
源文件是xml格式的,替换还是没成功!
发表于 2011-11-1 13:56:21 | 显示全部楼层
回复 5# weichenxiehou


    当语块中出现重定向符号时,cmd 在执行语句前的格式化阶段先判断哪些部分是重定向,为类似 >nul 和 <nul 这样的简写补上句柄 1 和 0,标记为重定向命令并后置,举例如下:
  1. for %%a in (t e s t) do dir>%%a.txt /b /a-d /s "%%a"
  2. ::进入循环后,dir>%%a.txt /b /a-d /s "%%a" 被格式化成 dir /b /a-d /s "%%a" 1>%%a.txt
  3. ::然后解释 %%a 为 t,再操作句柄。
复制代码
  1. for %%a in (">test.txt") do dir %%a /b /a-d /s test\
  2. ::进入循环后,dir %%a /b /a-d /s test\ 被格式化后还是 dir %%a /b /a-d /s test\,因为进行格式化时 %%a 还未被解释成>test.txt,所以 > 尚未生效,也就不被 cmd 认为是重定向语句
  3. ::然后解释 %%a 为 test.txt,再操作句柄为默认选项 1>con 2>con。
复制代码
发表于 2011-11-1 14:04:13 | 显示全部楼层
回复 10# pdp320921


你的xml文件是ANSI编码不?

评分

参与人数 1技术 +1 收起 理由
pdp320921 + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-11-1 14:07:48 | 显示全部楼层
本帖最后由 pdp320921 于 2011-11-1 14:13 编辑

回复 12# Batcher


,是英文系统里的。
发表于 2011-11-1 14:16:44 | 显示全部楼层
回复 13# pdp320921


跟系统语言没有一毛钱关系
你用记事本打开它,选择“另存为”,就可以看到。
 楼主| 发表于 2011-11-1 14:20:25 | 显示全部楼层
回复 14# Batcher


    默认是ANSI
还跟编码方式有关?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:56 , Processed in 0.022469 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表