假设我的目录结构是:
project
.svn
a.prt.1
b.prt.2
c.prt.3
base.asm.5
base.asm.6
com
i.crw.8
j.crw.9
我想用一个For来调用一个subrename子程序,所有.svn目录里的文件都不处理,其他的所有文件(包括所有子目录里的)都处理,即需要处理:
base.asm.5
base.asm.6
i.crw.8
j.crw.9
这个批处理应该怎么写呢?盼高手指教!非常感谢!
目前参考2楼、3楼的回复,未能达到期望效果。。。
源bat是这个:http://sharptechdesign.com/Utilities/Renumber_Bat.htm
用途是:在使用ProE的过程中,会产生后缀随保存次数而顺序递增的数值后缀,比如a.prt.1、a.prt.2、a.prt.3……
而要想与SVN结合使用,需要将最后一个a.prt.n重命名为a.prt.1,替换掉当前的a.prt.1
一个ProE工程中,可能会有好几层目录,会包含许多类似这样的文件
我的困惑是(双击运行ProReNumber.bat时):
1. 第10行,call :subrenumber "%1",最后会执行到第88行
复制代码
那这个时候批处理不是应该退出了吗?还会继续执行第11行吗?为什么呢?
2. 怎么只是第13行出现了goto:eof呢?这个语句不是应该成对出现的吗?它在这里出现的作用是什么呢?
3. time /t 这个一直出现,只是显示时间,但如果@echo off的话,这语句起什么作用呢?看不出来,是不是只是为了调试方便?
4. 假定我在ProE工程目录下双击运行ProReNumber.bat,工程目录下包含许多个子目录、子子目录等,每个子目录、子子目录下都会包含.svn目录,而我希望bat会递归重命名工程目录下的所有的文件,包括子目录、子子目录等里的文件,但所有的.svn目录下的文件都不要处理。
那么,看上去,第10行调用subrenumber时,只是递归重命名当前目录(即根目录)下的文件。然后运行到11行的For时,才进入到各层子目录去调用subrenumber来处理。是不是这样呢?
如果是这样,那我是不是同时要修改第11行的For和27行的For,让它不处理.svn目录呢?该修改成怎样呢?
第11行蛮奇怪的,For /D /R,百度搜得的结果看上去/R参数就已经“从当前目录或指定目录开始,深入所有子目录”了,那为何还要加/D参数呢?
5. 不懂第11行的For会怎样循环到退出? In (*.*)表示什么意思?
下面粘出这些代码:
- title ProReNumber
-
- if !"%1"==! goto :nopath
- if not exist %1*.* goto :badpath
-
- path="C:\ProeWildfire3.0\bin"
-
- :start
- time /t
- call :subrenumber "%1"
- FOR /D /R %%d IN (*.*) do call :subrenumber "%%d"
- time /t
- goto:eof
-
- :subrenumber
- cd /d "%1"
-
- echo Changing Attributes.. %1
- IF EXIST *.* attrib -R -H *.*
- time /t
-
- echo Purging.............. %1
- call purge.bat
- time /t
-
- echo Renumbering.......... %1
- for /F "tokens=1,2,3 delims=. " %%I in ('dir /b *.asm.* *.prt.* *.drw.* *.frm.* *.gph.* *.win.* *.tbl.* *.sym.*') do (
- if %%K GTR 1 Call :ReNameFile %%I %%J %%K
- )
- time /t
- goto :Cleaning
-
- :ReNameFile
- if exist %1.%2.%3 ren %1.%2.%3 %1.%2.1
- goto :complete
-
- :Cleaning
- echo Cleaning............. %1
- IF EXIST .* del /q .*
- IF EXIST *.als del /q *.als
- IF EXIST *.log.* del /q *.log.*
- IF EXIST *.inf.* del /q *.inf.*
- IF EXIST *.crc.* del /q *.crc.*
- IF EXIST *.ref.* del /q *.ref.*
- IF EXIST *.ptd.* del /q *.ptd.*
- IF EXIST *.tst.* del /q *.tst.*
- IF EXIST *.memb.* del /q *.memb.*
- IF EXIST *.ers.* del /q *.ers.*
- IF EXIST *.info.* del /q *.info.*
- IF EXIST *.lst.* del /q *.lst.*
- IF EXIST *.ncl.* del /q *.ncl.*
- IF EXIST *.shd.* del /q *.shd.*
- IF EXIST *.tph.* del /q *.tph.*
- IF EXIST *.ger.* del /q *.ger.*
- IF EXIST *.m_p.* del /q *.m_p.*
- IF EXIST *.plt.* del /q *.plt.*
- IF EXIST *.err.* del /q *.err.*
- IF EXIST *.xrp del /q *.xrp
- IF EXIST trail.txt* del /q trail.txt*
- IF EXIST pdm_trl* del /q pdm_trl*
- IF EXIST std.out del /q std.out
- IF EXIST rename_this_*.* del /q rename_this_*.*
- IF EXIST prt????.prt* del /q prt????.prt*
- IF EXIST asm????.asm* del /q asm????.asm*
- IF EXIST dgm????.dgm* del /q dgm????.dgm*
- IF EXIST drw????.drw* del /q drw????.drw*
- IF EXIST s2d????.sec* del /q s2d????.sec*
- IF EXIST lay????.lay* del /q lay????.lay*
- IF EXIST ptcs.txt del /q ptcs.txt
- IF EXIST ptcf.cmd del /q ptcf.cmd
- goto :complete
-
- :nopath
- echo.
- echo ERROR - No path provided.
- echo.
- pause
- goto :complete
-
- :badpath
- pause
- echo.
- echo ERROR - "%1" is not a valid path.
- echo.
- pause
- goto :complete
-
- :complete
- pause
- echo.
复制代码
[ 本帖最后由 okala 于 2011-2-28 09:00 编辑 ] |