Board logo

标题: [文本处理] [已解决]BAT脚本怎样批量修改文件夹和每个文件夹下某文件前两行内容? [打印本页]

作者: loquat    时间: 2012-8-2 19:09     标题: [已解决]BAT脚本怎样批量修改文件夹和每个文件夹下某文件前两行内容?

一个文件夹下有一大批目录,原命名方式如下
园发路+工业园路至立健药业公司-上行-1车道-20120515034553
现在要批量改成
工业园路-立健药业公司+园发路-上行-1车道-20120515034553

每个目录下都有如下文件:园发路+工业园路至立健药业公司-上行-1车道-20120515034553\PROJECTINFO\PAV.PRJ
需要把PAV.PRJ(为文本文件)的前两行改成如下格式:
工程名=工业园路-立健药业公司+园发路-上行-1车道-20120515034553
线路名=园发路

11楼为完美解决代码,将父目录拖到BAT上面,就自动修改文件夹和文件夹下的PAV.PRJ了。
代码看起来不复杂,仔细研究一下
作者: 冷玉公子    时间: 2012-8-2 22:57

不知道 给思路算不算 好简单的问题
要是实在写不出来 再回复吧
  1. @Echo Off
  2. Set "Str=园发路+工业园路至立健药业公司-上行-1车道-20120515034553"
  3. For /F "tokens=1-6 delims=至+-" %%A In ("%Str%") Do (
  4. Echo %%A %%B %%C %%D %%E %%F
  5. Echo %%B-%%C+%%A-%%D-%%E-%%F
  6. )
  7. Pause
复制代码

作者: loquat    时间: 2012-8-3 11:16

其实我是要做两个操作
一个是改文件夹名,二是改某文件的前两行
\\Server\2012.05.15\园发路+工业园路至立健药业公司-上行-1车道-20120515034553\PROJECTINFO\PAV.PRJ
能不能将PAV.PRJ文件拖入到BAT里面
然后获取并修改这一级目录“园发路+工业园路至立健药业公司-上行-1车道-20120515034553\“为”工业园路-立健药业公司+园发路-上行-1车道-20120515034553“
然后去修改PAV.PRJ文件
先帖整个文件吧
  1. 工程名=园发路
  2. 线路名=工业园路至立健药业公司
  3. 路幅=上行
  4. 车道=1车道
  5. 公路等级=二级公路
  6. 施测方向=顺测
  7. 匝道=
  8. 测量单位=XX
  9. 操作员=XXX
  10. 产权单位=XXX
  11. 天气=晴
  12. 路面类型=沥青
  13. 工程底图=D:\VMSControl\MapData\Maps\CHINA.GST
  14. 起始桩号=0K0M
  15. 终止桩号=0K211M
复制代码
我们要修改文件前两行,成下面这样
  1. 工程名=工业园路-立健药业公司+园发路-上行-1车道-20120515034553
  2. 线路名=园发路
复制代码
我自己一直不知道怎么用for批量操作文件夹名,操作文件名倒是能看懂一点
作者: loquat    时间: 2012-8-3 11:29

或者将文件夹拖入BAT,然后搜索PAV.PRJ并修改?
作者: apang    时间: 2012-8-3 12:40

试试
  1. @echo off
  2. ::判断是否拖拽文件夹
  3. if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
  4. if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
  5. ::修改PAV.PRJ前两行
  6. for /f "delims=" %%a in ('dir /a-d /b /s "%~1\PAV.PRJ"') do (
  7.   (echo,工程名=工业园路-立健药业公司+园发路-上行-1车道-20120515034553
  8.   echo,线路名=园发路
  9.   for /f "usebackq skip=2 delims=" %%b in ("%%a") do echo,%%b)>"%%~dpa$"
  10.   move "%%~dpa$" "%%a"
  11. )
  12. ::修改文件夹名
  13. for /f "delims=" %%a in ('dir /ad /b /s "%~1"') do (
  14.   if "%%~nxa"=="园发路+工业园路至立健药业公司-上行-1车道-20120515034553" (
  15.     ren "%%a" "工业园路-立健药业公司+园发路-上行-1车道-20120515034553"
  16.   )
  17. )
复制代码

作者: loquat    时间: 2012-8-3 13:33

回复 5# apang
嗯,谢谢你,其实是有很多个像上面那样的工程,不是光修改这一个文件夹,应该怎么修改下?
  1. ├─三联路+人民路至清龙路-上行-1车道-20120512164136
  2. ├─三联路+清龙路至人民路-下行-1车道-20120512165055
  3. ├─东环二路+布龙路至龙观路-下行-1车道-20120512141403
  4. ├─东环二路+龙观路至布龙路-上行-1车道-20120512143303
  5. ├─公园路1+人民路至工业路-上行-1车道-20120512165946
  6. ├─公园路1+工业路至人民路-下行-1车道-20120512163757
  7. ├─北环路+人民路至望成路-上行-1车道-20120512155557
  8. ├─北环路+望成路至人民路-下行-1车道-20120512154709
  9. ├─建设路1+工业路至清泉路-上行-1车道-20120512151447
  10. ├─建设路1+清泉路至工业路-下行-1车道-20120512162317
  11. ├─清泉路+北环路至民清路-上行-1车道-20120512160604
  12. ├─清泉路+民清路至建辉路-下行-1车道-20120512153028
  13. ├─清龙路+三联路至梅龙路-下行-1车道-20120512170655
  14. └─清龙路+梅龙路至三联路-上行-1车道-20120512171636
复制代码

作者: loquat    时间: 2012-8-3 13:35

不知道能不能理解,再解释一下
把这一批文件夹拖入到BAT上面,然后自动修改文件夹名称和文件夹下\PROJEXTINFO目录下的PAV.PRJ前两行的内容。
作者: loquat    时间: 2012-8-3 13:52

不知道这样对不对
  1. @echo off
  2. ::判断是否拖拽文件夹
  3. if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
  4. if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
  5. ::修改文件夹名
  6. for /f "tokens=1-6 delims=至+-" %%a in ("%~1") do (
  7.     ren "%~1" "%%B-%%C+%%A-%%D-%%E-%%F"
  8. ::修改PAV.PRJ前两行
  9. for /f "delims=" %%a in ('dir /a-d /b /s "%~1\PAV.PRJ"') do (
  10.   (echo,工程名=%%%~1!%%
  11.   echo,线路名=%%%%A%%
  12.   for /f "usebackq skip=2 delims=" %%b in ("%%a") do echo,%%b)>"%%~dpa$"
  13.   move "%%~dpa$" "%%a"
  14. )
  15. )
复制代码

作者: loquat    时间: 2012-8-3 13:53

变量延迟因为之前好像看到这样一个代码
  1. @echo off
  2. :main
  3. cls
  4. set str=
  5. set /p str=    请输入字符串(退出请直接按回车):
  6. if not defined str exit
  7. cls
  8. echo.
  9. echo            转换前:"%str%"
  10. for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set str=%%str:%%i=%%i%%
  11. echo ____________________________________________
  12. echo.
  13. echo            转换后:"%str%"
  14. echo.
  15. echo                     按任意键进行下一次演示...
  16. pause>nul
  17. goto main
复制代码
似乎跟下面这样是一样的
  1. setlocal enabledelayedexpansion
  2. for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set str=!str:%%i=%%i!
复制代码

作者: poter    时间: 2012-8-3 20:49

楼上的几个写得太复杂,哪有那么复杂啊,其实很简单的
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f "tokens=*" %%i in ('dir /b /ad') do (
  4. set str=%%i&set "str=!str:~-14!"
  5. set "str1=工业园路-立健药业公司+园发路-上行-1车道-!str!"
  6. for /f "tokens=*" %%j in ('type "%%i\PROJECTINFO\PAV.PRJ"') do (
  7. set /a a+=1
  8. if !a! == 1 echo !str1!>>$
  9. if !a! == 2 echo 线路名=园发路>>$
  10. if !a! gtr 2 echo %%j>>$
  11. )
  12. set a=
  13. move /y $ %%i\PROJECTINFO\PAV.PRJ
  14. ren "%%i" "!str1!"
  15. )
复制代码

作者: apang    时间: 2012-8-3 21:01

本帖最后由 apang 于 2012-8-3 22:28 编辑

楼主咋不早说清意图咧?揣摩了好久,还不知对不对
  1. @echo off
  2. if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
  3. if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
  4. for /f "delims=" %%a in ('dir /a-d /b /s "%~1\PAV.PRJ"') do (
  5.   for %%b in ("%%~dpa..") do (
  6.     for /f "tokens=1-3* delims=+-至" %%c in ("%%~nxb") do (
  7.       (echo,工程名=%%d-%%e+%%c-%%f
  8.       echo,线路名=%%c
  9.       for /f "usebackq skip=2 delims=" %%g in ("%%a") do echo,%%g)>"%%~dpa$"
  10.       move "%%~dpa$" "%%a"
  11.       ren "%%~fb" "%%d-%%e+%%c-%%f"
  12.     )
  13.   )
  14. )
复制代码

作者: loquat    时间: 2012-8-3 22:58

回复 10# poter
谢谢解答
似乎跟5楼一样,可能是我表述的不清楚,呵呵
本来我是想要批量修改的,工业园路-立健药业公司+园发路-上行-1车道-20120515034553这只是我想改的其中一个目录,其他目录都跟它命名方式相同。
同样这些文件夹下都有一个PROJECTINFO文件夹,PROJECTINFO文件夹下有一个PAV.PRJ文件

改的是工业园路-立健药业公司+园发路-上行-1车道-20120515034553PAV.PRJ
不过问题已经解决了,欢迎继续讨论!
作者: loquat    时间: 2012-8-3 23:11

楼主咋不早说清意图咧?揣摩了好久,还不知对不对
apang 发表于 2012-8-3 21:01

呵呵,可能我的表达方式太繁琐了,自以为已经表述清楚,实际上谁都没有耐心仔细去看。
简单明了地描述问题也是学问啊。




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