Board logo

标题: [文件操作] [已解决]批处理批量复制时路径带空格怎么办 [打印本页]

作者: renmingwu    时间: 2009-6-11 09:21     标题: [已解决]批处理批量复制时路径带空格怎么办

各位好:
  今天在编写代码中遇到了这么一个问题,我想从一个指定的文件夹中考出指定的文件类型,指定的文件夹中包含若干目录和子目录,目录中也包括空格,我已取得所有文件的具体地址,可由于有空格,DOS下只能识别空格之前的路径,我想问下大家是怎么解决这个问题的。方法和代码如下:
@echo off
for /r "v:/WTP650" %%i in (*.hup) do echo %%i >>hup.txt
cls
for /r "v:/WTP650" %%i in (*.pga) do echo %%i >>pga.txt
pause  
FOR /F "" %%i IN (hup.txt) DO copy %%i f:\aa
cls
FOR /F "" %%i IN (pga.txt) DO copy %%i f:\aa

从v盘的wtp650及其子目录中取出*.hub文件的路径写到hub.txt中,从v盘的wtp650及其子目录中取出*.pga到pga.txt中,运行完成后,先拷贝hub.txt中包含的文件到F:\aa,然后再拷贝pga.txt中的文件到F:\aa中。
可问题是hup.txt和pga.txt中的路径中含有空格,在拷贝中会出现问题,下面是部分路径名,我想请教下大家,能不能自动给里面的内容加上引号,当然是自动加。
v:\WTP650\WMS\2964-YF211\286A0066-016 2964\Test\194512.hup
v:\WTP650\WMS\2964-YF211\286A0072-044 2964\Test\194518.hup
v:\WTP650\WMS\2964-YF211\286A0074-018 2964\Test\194523.hup
v:\WTP650\WMS\2964-YF211\286A0076-125 2964\Test\194727.hup
v:\WTP650\WMS\2964-YF211\286A0076-125 2964A\Test\196196.hup
v:\WTP650\WMS\2964-YF211\286A0080-031 2964\Test\194729.hup
v:\WTP650\WMS\2964-YF211\286A0080-031 2964A\Test\196324.hup
v:\WTP650\WMS\2965-YH303\286A0066-016 2965\194538.hup
v:\WTP650\WMS\2965-YH303\286A0066-016 2965\Test\194538.hup

[ 本帖最后由 renmingwu 于 2009-6-12 08:22 编辑 ]
作者: terse    时间: 2009-6-11 09:32

这样不是加上了?直接COPY不行吗  绕来绕去啊
echo "%%i"
作者: kent    时间: 2009-6-11 09:43

  1. for /r "v:/WTP650" %%i in (*.hup,*.pga) do copy "%%i" f:\aa
复制代码


已经测试过,OK!
作者: renmingwu    时间: 2009-6-11 10:04

谢谢你,一言惊醒梦中人,已经好了。直接COPY不行,因为有空格,虽然已经加上了,可运行的时候还是有问题,还是会在空格的地方断掉,我再测试下。
@echo off
for /r "v:/WTP650" %%i in (*.hup) do echo "%%i" >>hup.txt
cls
for /r "v:/WTP650" %%i in (*.pga) do echo "%%i" >>pga.txt
pause  
FOR /F "" %%i IN (hup.txt) DO copy %%i f:\aa
cls
FOR /F "" %%i IN (pga.txt) DO copy %%i f:\aa
作者: renmingwu    时间: 2009-6-11 10:09

原帖由 kent 于 2009-6-11 09:43 发表
for /r "v:/WTP650" %%i in (*.hup,*.pga) do copy "%%i" f:\aa

已经测试过,OK!

谢谢你,我也测试了你的这段代码,真的行了,感谢你们的帮助,真诚的!
也请版主帮忙改下,找不到怎么改成已解决!

[ 本帖最后由 renmingwu 于 2009-6-11 12:57 编辑 ]
作者: kent    时间: 2009-6-11 13:34

原帖由 renmingwu 于 2009-6-11 10:04 发表
谢谢你,一言惊醒梦中人,已经好了。直接COPY不行,因为有空格,虽然已经加上了,可运行的时候还是有问题,还是会在空格的地方断掉,我再测试下。
@echo off
for /r "v:/WTP650" %%i in (*.hup) do echo "%%i" >>h ...


一句话就可以实现的事情,你干嘛非要整这么多行?
不过如果非要像你这样写,也可以,但是要改一下,有两种改法:
a.
  1. FOR /F "tokens=*" %%i IN (hup.txt) DO copy %%i f:\aa
  2. FOR /F "tokens=*" %%i IN (pga.txt) DO copy %%i f:\aa
复制代码
b.
  1. FOR /F "delims=," %%i IN (hup.txt) DO copy %%i f:\aa
  2. FOR /F "delims=," %%i IN (pga.txt) DO copy %%i f:\aa
复制代码
你没有文件夹的名字里有逗号的吧?

for /f 默认是以空格和或跳格键作为间隔符的,"for /?"里就有说明,可以仔细看看。

PS: 你自己就可以改本帖的标题啊,编辑楼主的帖子即可,在标题前加上 【已解决】
作者: renmingwu    时间: 2009-6-12 08:22

原帖由 kent 于 2009-6-11 13:34 发表


一句话就可以实现的事情,你干嘛非要整这么多行?
不过如果非要像你这样写,也可以,但是要改一下,有两种改法:
a.FOR /F "tokens=*" %%i IN (hup.txt) DO copy %%i f:\aa

FOR /F "tokens=*" %%i IN (pga ...

谢谢你,初学,对FOR还是认识的不深刻!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2