公司所处行业存在特殊性,在使用CAD画图时设计人员广泛使用外部参照图,有时需要批量更换参照图,手工替换耗时耗力,使用批处进行替换即简单又方便,但同事手中批处理语句有BUG,我把协助解决过程进行记录,现分享给大家。

具体过程:

  • 得到批处理语句

for /f %i in (‘dir /s /b tk.dwg’) do copy /y C:\Users\Administrator\Desktop\222\tk.dwg %i

利用dir命令查找硬盘所有图签文件位置,for in进行提取,%i作为变量,copy /y 进行替换复制。

语句十分精干肉眼看出不问题,但海亮兄找我的原因是不执行,并说应该文件夹名称是中文的问题?我一口否决。DOS下的中文文件夹名的问题是上古时期的问题,如今不应再出现。

  • 那么会是什么原因导致的中文文件夹执行失败的问题?

编码问题?对,会不会他的BAT文件是Unicode编码,建议改成ANSI编码!但海亮兄反馈编码没问题!

  • 海亮兄不是别人,只好花些时间及精力拆分语句分析具体原因。

dir 查看目录命令十分简单,谨慎点还是执行一下。

创建测试环境,执行结果为dir语句没有问题。

  • 海亮兄又反馈我说应该是路径包含空格的问题!这是有可能的!

BAT中路径空格需要特殊处理,简单方式是将路径用双引号括起来,将COPY后面的%i增加双引号,修改语句为:

for /f %i in (‘dir /s /b upda.swk’) do copy /y C:\Users\Administrator\Desktop\加密图纸查看器LockView\upda.swk “%i”

坑是不是这么容易填平,执行一下:

失败,copy的最终文件位置不对,这坑很深沉啊!细看观察路径判断应该是for in提取的问题。

加入变量输出,验证一下:

果然有问题,和上面dir /s /b upda.swk 结果比对,坑是for in 提取路径不全,遇空格就提前截取了。。。

怎么办?上网找找资料,看看有没有现成的填坑方法!网上资料多数都是提相关问题的,唉~没有解决办法!乌合之众,都是什么水平。。。

但找到一段代码,代码中用”delims= ” 空格作为截止符!转换思路,COPY一下,删除”delims= “里空格,套到咱的批处理语句中执行。。。

for /f “delims=” %i in (‘dir /s /b upda.swk’) do copy /y C:\Users\Administrator\Desktop\加密图纸查看器LockView\upda.swk “%i”

“坑”填平了,联系海亮兄。

小小一行语句,浪费我这么长时间!青春就是无数行代码中度过的!为了让大家节约点时间,留住你们青春的尾巴,将无坑替换文件BAT分享给大家。

无坑替换文件BAT为 :

for /f “delims=” %i in (‘dir /s /b 要替换的文件名’) do copy /y 替换源文件路径及文件名 “%i”