批处理填坑一记

公司所处行业存在特殊性,在使用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”

这里是引用
https://www.pinpinxi.com/blog/%e6%8a%80%e6%9c%af%e5%88%86%e4%ba%ab/%e6%89%b9%e5%a4%84%e7%90%86%e5%a1%ab%e5%9d%91%e4%b8%80%e8%ae%b0.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值