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

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

[复制链接]
发表于 2012-8-2 19:09:27 | 显示全部楼层 |阅读模式
一个文件夹下有一大批目录,原命名方式如下
园发路+工业园路至立健药业公司-上行-1车道-20120515034553
现在要批量改成
工业园路-立健药业公司+园发路-上行-1车道-20120515034553

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

11楼为完美解决代码,将父目录拖到BAT上面,就自动修改文件夹和文件夹下的PAV.PRJ了。
代码看起来不复杂,仔细研究一下

评分

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

查看全部评分

发表于 2012-8-2 22:57:39 | 显示全部楼层
不知道 给思路算不算 好简单的问题
要是实在写不出来 再回复吧

  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
复制代码
 楼主| 发表于 2012-8-3 11:16:07 | 显示全部楼层
其实我是要做两个操作
一个是改文件夹名,二是改某文件的前两行
\\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批量操作文件夹名,操作文件名倒是能看懂一点
 楼主| 发表于 2012-8-3 11:29:12 | 显示全部楼层
或者将文件夹拖入BAT,然后搜索PAV.PRJ并修改?
发表于 2012-8-3 12:40:55 | 显示全部楼层
试试
  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. )
复制代码
 楼主| 发表于 2012-8-3 13:33:17 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2012-8-3 13:35:36 | 显示全部楼层
不知道能不能理解,再解释一下
把这一批文件夹拖入到BAT上面,然后自动修改文件夹名称和文件夹下\PROJEXTINFO目录下的PAV.PRJ前两行的内容。
 楼主| 发表于 2012-8-3 13:52:49 | 显示全部楼层
不知道这样对不对
  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. )
复制代码
 楼主| 发表于 2012-8-3 13:53:54 | 显示全部楼层
变量延迟因为之前好像看到这样一个代码
  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!
复制代码
发表于 2012-8-3 20:49:22 | 显示全部楼层
楼上的几个写得太复杂,哪有那么复杂啊,其实很简单的
  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. )
复制代码
发表于 2012-8-3 21:01:05 | 显示全部楼层
本帖最后由 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. )
复制代码

评分

参与人数 1技术 +1 收起 理由
loquat + 1 感谢耐心帮忙,受教了

查看全部评分

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

改的是工业园路-立健药业公司+园发路-上行-1车道-20120515034553PAV.PRJ
不过问题已经解决了,欢迎继续讨论!
 楼主| 发表于 2012-8-3 23:11:33 | 显示全部楼层
楼主咋不早说清意图咧?揣摩了好久,还不知对不对
apang 发表于 2012-8-3 21:01

呵呵,可能我的表达方式太繁琐了,自以为已经表述清楚,实际上谁都没有耐心仔细去看。
简单明了地描述问题也是学问啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 10:01 , Processed in 0.022975 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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