查看: 3615|回复: 15
收起左侧

[其他] 批处理查找及替换

[复制链接]
zixing23
发表于 2013-3-6 16:05:07 | 显示全部楼层 |阅读模式
需要写一个脚本,把d盘中的1.txt中的变量$p,替换成aaa,然后在aaa后面插入当前的系统时间,如何实现?
loms126
发表于 2013-3-6 16:49:35 | 显示全部楼层
本帖最后由 loms126 于 2013-3-6 16:52 编辑
  1. @echo off
  2. set cf=1.txt
  3. set st=$p
  4. set dt=aaa%time%
  5. for /r  %%a in (%cf%) do (call :doit "%%~dpa")
  6. goto end
  7. :doit
  8. setlocal enabledelayedexpansion
  9. pushd %1
  10. for /f "tokens=1,2* delims=:" %%i in ('findstr /n ".*" %cf%') do (
  11. set txt=%%j
  12. if "!txt!" == "" (
  13. echo.>>%1root.tmp
  14. ) else (
  15. echo !txt:%st%=%dt%!>>%1root.tmp
  16. )
  17. )
  18. move /y root.tmp root.txt
  19. :end
复制代码
参考了这篇文章:参考文章
cf为要搜索的文件名
st为要搜索的字符串
dt为要替换成的字符串
替换后用文件名root.txt保存。


个人喜欢用AHK写,5行代码:
  1. timestring = %A_Hour%:%A_Min%:%A_Sec%
  2. FileRead, FileVar, a.txt
  3. StringReplace, OutputVar, FileVar,$p,aaa%timestring%,All
  4. FileAppend,%OutputVar%,b.txt
  5. Exit
复制代码
zixing23
 楼主| 发表于 2013-3-6 17:32:01 | 显示全部楼层
loms126 发表于 2013-3-6 16:49
参考了这篇文章:参考文章
cf为要搜索的文件名
st为要搜索的字符串

你好,按你这样做,我把这个脚本放在D盘,D盘会产生root.txt,结果与我想要的一样,但是在执行过程中,一直会提示打不开1.txt,一直这样提示。这个怎么去掉?
loms126
发表于 2013-3-6 17:39:49 | 显示全部楼层
本帖最后由 loms126 于 2013-3-6 17:44 编辑
zixing23 发表于 2013-3-6 17:32
你好,按你这样做,我把这个脚本放在D盘,D盘会产生root.txt,结果与我想要的一样,但是在执行过程中,一直 ...


能否截个图?代码会遍历子文件夹,这点请注意。如果只需要当前目录的,请将第5行的 /r 改成 /d。
恋爱的夏娜
头像被屏蔽
发表于 2013-3-6 17:49:05 | 显示全部楼层
loms126 发表于 2013-3-6 16:49
参考了这篇文章:参考文章
cf为要搜索的文件名
st为要搜索的字符串

你知道如何用PowerShell实现这个功能么?
loms126
发表于 2013-3-6 17:54:14 | 显示全部楼层
恋爱的夏娜 发表于 2013-3-6 17:49
你知道如何用PowerShell实现这个功能么?

这个真不会,PowerShell就用过一次。编程里比较擅长的是matlab,ahk一般般,批处理一知半解,PowerShell一点都不懂。
真需要的话我晚上学学看,既然是shell,拼凑命令这招屡试不爽
恋爱的夏娜
头像被屏蔽
发表于 2013-3-6 17:57:33 | 显示全部楼层
loms126 发表于 2013-3-6 17:54
这个真不会,PowerShell就用过一次。编程里比较擅长的是matlab,ahk一般般,批处理一知半解,Powe ...

我现在在临时学习PowerShell,发现select-string应该可以用,我试试看。
恋爱的夏娜
头像被屏蔽
发表于 2013-3-6 17:58:32 | 显示全部楼层
zixing23 发表于 2013-3-6 17:32
你好,按你这样做,我把这个脚本放在D盘,D盘会产生root.txt,结果与我想要的一样,但是在执行过程中,一直 ...

如果方便的话,可以直接把你的那个文本文件发给我么?我看看。
准备尝试用PowerShell解决问题,应该比批处理简单一些。
zixing23
 楼主| 发表于 2013-3-6 18:53:39 | 显示全部楼层
loms126 发表于 2013-3-6 17:39
能否截个图?代码会遍历子文件夹,这点请注意。如果只需要当前目录的,请将第5行的 /r 改成 /d。

谢谢,改为/d可以了,问一下,我是要日期,显示的是aaa2013-03-06 星期三
我想把后面的星期三去掉,如何弄?
loms126
发表于 2013-3-6 19:14:01 | 显示全部楼层
zixing23 发表于 2013-3-6 18:53
谢谢,改为/d可以了,问一下,我是要日期,显示的是aaa2013-03-06 星期三
我想把后面的星期三去掉,如何 ...

用%date:~x,y% 可以取得第x个字符起的y个字符。
所以用%date:~0,10%即可。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-5-14 16:22 , Processed in 0.152640 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

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