标题: [文本处理] [已解决]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
不知道 给思路算不算 好简单的问题
要是实在写不出来 再回复吧- @Echo Off
-
- Set "Str=园发路+工业园路至立健药业公司-上行-1车道-20120515034553"
-
- For /F "tokens=1-6 delims=至+-" %%A In ("%Str%") Do (
- Echo %%A %%B %%C %%D %%E %%F
- Echo %%B-%%C+%%A-%%D-%%E-%%F
- )
- 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车道
- 公路等级=二级公路
- 施测方向=顺测
- 匝道=
- 测量单位=XX
- 操作员=XXX
- 产权单位=XXX
- 天气=晴
- 路面类型=沥青
- 工程底图=D:\VMSControl\MapData\Maps\CHINA.GST
- 起始桩号=0K0M
- 终止桩号=0K211M
复制代码
我们要修改文件前两行,成下面这样- 工程名=工业园路-立健药业公司+园发路-上行-1车道-20120515034553
- 线路名=园发路
复制代码
我自己一直不知道怎么用for批量操作文件夹名,操作文件名倒是能看懂一点
作者: loquat 时间: 2012-8-3 11:29
或者将文件夹拖入BAT,然后搜索PAV.PRJ并修改?
作者: apang 时间: 2012-8-3 12:40
试试- @echo off
- ::判断是否拖拽文件夹
- if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
- if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
- ::修改PAV.PRJ前两行
- for /f "delims=" %%a in ('dir /a-d /b /s "%~1\PAV.PRJ"') do (
- (echo,工程名=工业园路-立健药业公司+园发路-上行-1车道-20120515034553
- echo,线路名=园发路
- for /f "usebackq skip=2 delims=" %%b in ("%%a") do echo,%%b)>"%%~dpa$"
- move "%%~dpa$" "%%a"
- )
- ::修改文件夹名
- for /f "delims=" %%a in ('dir /ad /b /s "%~1"') do (
- if "%%~nxa"=="园发路+工业园路至立健药业公司-上行-1车道-20120515034553" (
- ren "%%a" "工业园路-立健药业公司+园发路-上行-1车道-20120515034553"
- )
- )
复制代码
作者: loquat 时间: 2012-8-3 13:33
回复 5# apang
嗯,谢谢你,其实是有很多个像上面那样的工程,不是光修改这一个文件夹,应该怎么修改下?- ├─三联路+人民路至清龙路-上行-1车道-20120512164136
- ├─三联路+清龙路至人民路-下行-1车道-20120512165055
- ├─东环二路+布龙路至龙观路-下行-1车道-20120512141403
- ├─东环二路+龙观路至布龙路-上行-1车道-20120512143303
- ├─公园路1+人民路至工业路-上行-1车道-20120512165946
- ├─公园路1+工业路至人民路-下行-1车道-20120512163757
- ├─北环路+人民路至望成路-上行-1车道-20120512155557
- ├─北环路+望成路至人民路-下行-1车道-20120512154709
- ├─建设路1+工业路至清泉路-上行-1车道-20120512151447
- ├─建设路1+清泉路至工业路-下行-1车道-20120512162317
- ├─清泉路+北环路至民清路-上行-1车道-20120512160604
- ├─清泉路+民清路至建辉路-下行-1车道-20120512153028
- ├─清龙路+三联路至梅龙路-下行-1车道-20120512170655
- └─清龙路+梅龙路至三联路-上行-1车道-20120512171636
复制代码
作者: loquat 时间: 2012-8-3 13:35
不知道能不能理解,再解释一下
把这一批文件夹拖入到BAT上面,然后自动修改文件夹名称和文件夹下\PROJEXTINFO目录下的PAV.PRJ前两行的内容。
作者: loquat 时间: 2012-8-3 13:52
不知道这样对不对- @echo off
-
- ::判断是否拖拽文件夹
- if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
- if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
-
- ::修改文件夹名
- for /f "tokens=1-6 delims=至+-" %%a in ("%~1") do (
- ren "%~1" "%%B-%%C+%%A-%%D-%%E-%%F"
-
- ::修改PAV.PRJ前两行
- for /f "delims=" %%a in ('dir /a-d /b /s "%~1\PAV.PRJ"') do (
- (echo,工程名=%%%~1!%%
- echo,线路名=%%%%A%%
- for /f "usebackq skip=2 delims=" %%b in ("%%a") do echo,%%b)>"%%~dpa$"
- move "%%~dpa$" "%%a"
- )
-
- )
复制代码
作者: loquat 时间: 2012-8-3 13:53
变量延迟因为之前好像看到这样一个代码- @echo off
- :main
- cls
- set str=
- set /p str= 请输入字符串(退出请直接按回车):
- if not defined str exit
- cls
- echo.
- echo 转换前:"%str%"
- 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%%
- echo ____________________________________________
- echo.
- echo 转换后:"%str%"
- echo.
- echo 按任意键进行下一次演示...
- pause>nul
- goto main
复制代码
似乎跟下面这样是一样的- setlocal enabledelayedexpansion
- 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
楼上的几个写得太复杂,哪有那么复杂啊,其实很简单的- @echo off
- setlocal enableDelayedExpansion
- for /f "tokens=*" %%i in ('dir /b /ad') do (
- set str=%%i&set "str=!str:~-14!"
- set "str1=工业园路-立健药业公司+园发路-上行-1车道-!str!"
- for /f "tokens=*" %%j in ('type "%%i\PROJECTINFO\PAV.PRJ"') do (
- set /a a+=1
- if !a! == 1 echo !str1!>>$
- if !a! == 2 echo 线路名=园发路>>$
- if !a! gtr 2 echo %%j>>$
- )
- set a=
- move /y $ %%i\PROJECTINFO\PAV.PRJ
- ren "%%i" "!str1!"
- )
复制代码
作者: apang 时间: 2012-8-3 21:01
本帖最后由 apang 于 2012-8-3 22:28 编辑
楼主咋不早说清意图咧?揣摩了好久,还不知对不对- @echo off
- if "%~1"=="" echo 请拖拽文件夹&pause&goto :eof
- if not exist "%~1\" echo 请拖拽文件夹&pause&goto :eof
- for /f "delims=" %%a in ('dir /a-d /b /s "%~1\PAV.PRJ"') do (
- for %%b in ("%%~dpa..") do (
- for /f "tokens=1-3* delims=+-至" %%c in ("%%~nxb") do (
- (echo,工程名=%%d-%%e+%%c-%%f
- echo,线路名=%%c
- for /f "usebackq skip=2 delims=" %%g in ("%%a") do echo,%%g)>"%%~dpa$"
- move "%%~dpa$" "%%a"
- ren "%%~fb" "%%d-%%e+%%c-%%f"
- )
- )
- )
复制代码
作者: loquat 时间: 2012-8-3 22:58
回复 10# poter
谢谢解答
似乎跟5楼一样,可能是我表述的不清楚,呵呵
本来我是想要批量修改的,工业园路-立健药业公司+园发路-上行-1车道-20120515034553这只是我想改的其中一个目录,其他目录都跟它命名方式相同。
同样这些文件夹下都有一个PROJECTINFO文件夹,PROJECTINFO文件夹下有一个PAV.PRJ文件
改的是工业园路-立健药业公司+园发路-上行-1车道-20120515034553和PAV.PRJ
不过问题已经解决了,欢迎继续讨论!
作者: loquat 时间: 2012-8-3 23:11
楼主咋不早说清意图咧?揣摩了好久,还不知对不对
apang 发表于 2012-8-3 21:01
呵呵,可能我的表达方式太繁琐了,自以为已经表述清楚,实际上谁都没有耐心仔细去看。
简单明了地描述问题也是学问啊。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |