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


    我24小时评分收到限制了 回头我把分数给您补上 嘿嘿

TOP

回复 3# powerbat


    对了 想问下您 你的代码在哪里可以进行运行 不好意思我没学过javascript

TOP

回复 7# cpp


    将3楼的代码整个保存为一个bat文件运行即可(将有关路径按实际情况修改)。这是bat+js二合一。

TOP

回复 8# powerbat


    呵呵 好的 多谢啦

TOP

批处理强大啊

TOP

本帖最后由 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

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

回复 16# cpp


    三月学习雷锋月,艰苦奋斗,助人为乐,无私奉献!~不必客气!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 22# cjiabing


    嘿嘿 以后不懂的还是多向你请教了

TOP

回复 21# terse


    多谢啦,评分还是不能评 回头都给补上

TOP

楼主比较幸运,代码中有“while(i<=6)”,但没有“if(!x)”之类(看到前面这种形式很容易联想到后者)。如果有感叹号!,用那些bat文件处理后可能导致很严重的后果。

TOP

回复 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)这个子文件夹下的,
我试着修改但是没成功。不知道怎么修改呢?

TOP

回复 25# powerbat


    哦 什么后果呢

TOP

回复 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
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 28# cjiabing


    恩 其实我说了每个子文件夹下又有一个ctl的 ,不过没事我把这些ctl统一放到一个文件夹下拉,多谢你的解释噢

TOP

回复 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”

TOP

返回列表