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

[文本处理] 批处理如何修改文本内容?

[复制链接]
 楼主| 发表于 2012-3-18 22:28:52 | 显示全部楼层
回复 2# cjiabing


    我24小时评分收到限制了 回头我把分数给您补上 嘿嘿
 楼主| 发表于 2012-3-18 22:37:37 | 显示全部楼层
回复 3# powerbat


    对了 想问下您 你的代码在哪里可以进行运行 不好意思我没学过javascript
发表于 2012-3-18 22:44:35 | 显示全部楼层
回复 7# cpp


    将3楼的代码整个保存为一个bat文件运行即可(将有关路径按实际情况修改)。这是bat+js二合一。
 楼主| 发表于 2012-3-18 23:00:00 | 显示全部楼层
回复 8# powerbat


    呵呵 好的 多谢啦
发表于 2012-3-18 23:00:43 | 显示全部楼层
批处理强大啊
发表于 2012-3-18 23:10:06 | 显示全部楼层
本帖最后由 terse 于 2012-3-20 22:59 编辑

按一楼新要求 修改 不保证代码的通用行 运行代码前 请先备份总文件夹下的所有文件

  1. @echo off&setlocal enabledelayedexpansion
  2. set "ph=d:\123"
  3. cd /d "%ph%"
  4. for /f "tokens=*" %%i in ('dir /s /b /a-d "%ph%*.ctl"') do (
  5.     for /f "usebackq tokens=1,2" %%j in ("%%~i") do if /i "%%j"=="tdef" set "N=%%k"
  6.     (for /f "usebackq tokens=*" %%j in ("cp.gs") do (
  7.         set "Str=%%j"
  8.         if "%%~xj" neq ".ctl'" (
  9.            if "!str:~,9!" neq "while(i<=" (
  10.               if "!str:~,9!" equ "'printim " (echo 'printim %%~dpi%%~nxj)else echo %%j
  11.            ) else echo while^(i^<=!N!^)
  12.         ) else echo 'open %%i'
  13.     ))>"~temp.mp"
  14.     move "~temp.mp" "%ph%cp.gs"
  15.     grads -blc "%ph%cp.gs"
  16. )
  17. pause
复制代码

评分

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

查看全部评分

发表于 2012-3-18 23:31:40 | 显示全部楼层
回复 16# cpp


    三月学习雷锋月,艰苦奋斗,助人为乐,无私奉献!~不必客气!~
 楼主| 发表于 2012-3-19 15:34:10 | 显示全部楼层
回复 22# cjiabing


    嘿嘿 以后不懂的还是多向你请教了
 楼主| 发表于 2012-3-19 15:35:42 | 显示全部楼层
回复 21# terse


    多谢啦,评分还是不能评 回头都给补上
发表于 2012-3-19 21:16:40 | 显示全部楼层
楼主比较幸运,代码中有“while(i<=6)”,但没有“if(!x)”之类(看到前面这种形式很容易联想到后者)。如果有感叹号!,用那些bat文件处理后可能导致很严重的后果。
 楼主| 发表于 2012-3-19 21:46:35 | 显示全部楼层
回复 10# cjiabing


    你好 我运行了你给我的代码 其他都没问题 但是有个问题就是if "%%i"=="'open D:\2010\1\1.ctl'" set var=!var:\1.ctl=\%%~na.ctl!
这个出来后每次新的gs都是读取的'open D:\2010\1下的ctl 比如'open D:\2010\1\1.ctl,下一个就是'open D:\2010\1\2.ctl,由于我的2.ctl是放在2(暂时取名为2)这个子文件夹下的,
我试着修改但是没成功。不知道怎么修改呢?
 楼主| 发表于 2012-3-19 21:49:28 | 显示全部楼层
回复 25# powerbat


    哦 什么后果呢
发表于 2012-3-20 14:39:44 | 显示全部楼层
回复 26# cpp


    我给你解释下:
@echo off&setlocal enabledelayedexpansion
for /r %%a in (*.ctl) do (——这个是搜索当前目录下所有格式为ctl的文件,刚好你说有五十个文件夹那就是搜索到五十个文件了,刚好也就循环了五十次了。谁知道你还有那么多ctl文件!
    for /f "usebackq tokens=1,2" %%x in ("%%~a") do if /i "%%x"=="tdef" set "str=%%y"——这句是获得tdef的。
    for /f "tokens=*" %%i in (xxx.gs) do (——这个是读取gs文件内容的,我认为只有一个xxx.gs。
        set "var=%%i"
        if "%%i"=="'open d:\chenp\cccc.ctl'" set var=!var:\cccc.ctl=\%%~na.ctl!——这个是修改文件名的。
        if "%%i"=="while(i<=6)" set "var=while(i<=!str!)"——这句是投机取巧的。
        for /d  %%l in ("%%~dpa") do  set "var=!var:d:\chenp\700h_=%%~fl700h_!"——这句是替换d:\chenp\这个路径为子文件夹路径的。
        echo;!var!
    )>>new_xxx.gs
pause
    echo grads -blc "%~dp1new_xxx.gs"
    del /f new_xxx.gs>nul 2>nul
)
pause
 楼主| 发表于 2012-3-20 19:45:46 | 显示全部楼层
回复 28# cjiabing


    恩 其实我说了每个子文件夹下又有一个ctl的 ,不过没事我把这些ctl统一放到一个文件夹下拉,多谢你的解释噢
发表于 2012-3-20 19:57:54 | 显示全部楼层
回复 28# cjiabing
看了下版主代码 觉得下面这句有疑惑
  1. if "%%i"=="'open d:\chenp\cccc.ctl'" set var=!var:\cccc.ctl=\%%~na.ctl!——这个是修改文件名的。
复制代码
你给这里的条件是 if "%%i"=="'open d:\chenp\cccc.ctl'"  但实际不定的  也就是并不一定是 “d:\chenp\cccc.ctl”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 22:25 , Processed in 0.021315 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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