Board logo

标题: [文件操作] [已解决]批处理复制时出现“无法创建目录或文件”的错误信息提示 [打印本页]

作者: longmao    时间: 2012-5-27 13:20     标题: [已解决]批处理复制时出现“无法创建目录或文件”的错误信息提示

本帖最后由 longmao 于 2012-5-29 21:16 编辑

我的代码:

@for %%i in (f e d c) do for /f "delims=" %%a in ('dir /a-d /s /b %%i:\*.doc') do copy "%%a" H:\

预期实现功能:

搜索电脑硬盘上所有的(包括系统隐藏的)doc\docx文件,并复制到H:\下。

出现的问题:
1.只能复制一部分doc文件,很多的doc文件都出现“无法创建目录或文件”的错误信息提示。
2.系统隐藏的文件没有查找和复制到。

希望获得的帮助:
1.解决“无法创建目录或文件”的bug
2.实现复制系统隐藏了的文件,或是在系统隐藏文件后缀名称后依然有用。


偶是初学者,不知道是不是xcopy效率更高?希望代码效率越高越好。

如能解答,感激不尽~谢谢~
作者: gawk    时间: 2012-5-27 13:37

  1. @echo on
  2. for %%i in (f e d c) do (
  3.     for /f "delims=" %%a in ('dir /a-d /s /b %%i:\*.doc') do (
  4.         echo 正在处理"%%a"
  5.         copy "%%a" H:\
  6.     )
  7. )
  8. pause
复制代码
把报错时的执行信息贴出来看看
作者: longmao    时间: 2012-5-27 16:55

回复 2# gawk
作者: longmao    时间: 2012-5-27 17:43

回复 2# gawk


    感谢您的回复~

刚刚测试了您修改后的代码,依然会出现一样的“无法创建目录或文件”的错误提示信息...
作者: broly    时间: 2012-5-27 18:40

  1. @echo off
  2. set "des=%~dp0"
  3. for /f "tokens=2 delims==" %%i in ('wmic LogicalDisk where DriveType^=3 get DeviceID /value') do (
  4.   for /f "delims=" %%j in ('dir /b/a-d/s %%i\*.doc %%i\*.docx') do copy "%%j" "%des%" /y
  5. )
  6. pause
复制代码

作者: longmao    时间: 2012-5-27 20:38

本帖最后由 longmao 于 2012-5-29 21:18 编辑

回复 5# broly


    再次感谢版主大神的回复~!

亲自测试使用效果:

点开批处理后,先是搜索,然后显示复制成功一大堆文件。

出现的问题:
1.所有文件复制到的位置不是U盘,而是桌面。。。一会儿黑压压的出现了一屏幕。。。
——见楼下,已解决。
作者: broly    时间: 2012-5-27 21:00

回复 6# longmao


    你是放在桌面运行的吧?我按照你的第5个要求写的。
下面是后台运行的。如果后台运行了,你怎么知道运行成功了没有?
  1. @echo off
  2. if "%1" == "h" goto begin
  3. mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
  4. :begin
  5. set "des=%~dp0"
  6. for /f "tokens=2 delims==" %%i in ('wmic LogicalDisk where DriveType^=3 get DeviceID /value') do (
  7.   for /f "delims=" %%j in ('dir /b/a-d/s %%i\*.doc %%i\*.docx') do copy "%%j" "%des%" /y
  8. )
复制代码

作者: longmao    时间: 2012-5-28 09:43

本帖最后由 longmao 于 2012-5-29 21:21 编辑

回复 7# broly

broly版主是大神不解释。。。

太感谢啦~!!!

昨天是我2了,确实是在桌面上运行的。。。

broly版主把俺的全部预期基本上都实现了~ 感激涕零啊
牛人啊!!!
作者: gawk    时间: 2012-5-28 13:28

回复 8# longmao


给dir命令的/a选项加上h或者s

  /A          Displays files with specified attributes.
  attributes   D  Directories                R  Read-only files
               H  Hidden files               A  Files ready for archiving
               S  System files               -  Prefix meaning not
作者: gawk    时间: 2012-5-28 13:30

回复 4# longmao


代码我基本上没有任何修改,只是调整了格式,告诉你怎样查看执行过程。
你这个截图基本上没有任何意义,因为看不到“无法创建目录或文件”之前发生了什么事情,别人想告诉你为何出错也没有办法了。
作者: longmao    时间: 2012-5-28 16:52

本帖最后由 longmao 于 2012-5-29 21:20 编辑

回复 7# broly

我看broly 版主给dir命令的/a选项加的是s,我之前的代码也加的是s,如果改成h是不是就能包括隐藏文件了?还是s所谓的系统文件包括了用户隐藏的文件?

我测试了下好像不行,说h是无效的开关。。。

求broly 版主不吝赐教。。。
作者: broly    时间: 2012-5-28 17:10

回复 11# longmao


    最后两点可以实现,但是需要比较多的步骤,麻烦多了。而且这样做也没什么意思吧?反正都是全部都要复制进去的,谁先后还不是一样。
    所以没有意义的事,不太想做
作者: gawk    时间: 2012-5-28 17:13

回复 11# longmao


    那两个s根本就不是同一回事

  /S          Displays files in specified directory and all subdirectories.
作者: longmao    时间: 2012-5-28 18:38

回复 13# gawk

哦哦~学习了~
作者: longmao    时间: 2012-5-28 18:42

本帖最后由 longmao 于 2012-5-28 18:50 编辑

回复 12# broly

恩恩,其实能全部复制进去就好。主要是电脑文件太多了,测试用的U盘太小了,没测试到隐藏文件是不是能复制进去,才想优先复制隐藏文件的。。。

下次俺换个大点儿的优盘测下吧~按理说是可以复制成功所有类型是隐藏的文件的吧?包括系统的隐藏文件和用户定义的隐藏文件?
谢谢大神回复~
作者: poter    时间: 2012-5-28 19:02

回复 7# broly


    很想知道楼主的代码错在哪里? 如果不用vbs和wmic该怎么实现那个功能?
作者: broly    时间: 2012-5-29 22:09

回复 16# poter


    wmic是用来获取有效的盘符的。不使用也可以实现,就是逐个盘符判断。
    VBS部分,其实不是真正意义上的VBS,这个只是用来后台运行批处理的,不使用也可以。
   
    至于先前楼主出错的原因,应该是那个盘符  j:\ 的问题。不存在或者不可用
作者: longmao    时间: 2012-5-31 15:59

本帖最后由 longmao 于 2012-5-31 16:12 编辑

回复 5# broly


        版主大神好~!

现象:
我使用16GB的高速U盘测试了,在您写的前台运行的代码中看到,在复制office的系统隐藏文件(以~$开头,但是也是.doc结尾的)和我自己设置的隐藏文件进行测试时,出现“系统找不到指定类型的文件”。但是我将隐藏文件的属性去掉,就能成功复制了~!!!亲测。。。

问题:

控制台程序明明是搜索到了隐藏类型的文件(系统的或是用户的),但是木有进行复制,只是显示“系统找不到指定类型的文件”,很不理解,求您帮忙修改代码。。


先行谢过大神~
作者: longmao    时间: 2012-6-2 16:51

回复 7# broly

broly版主大神,您的这段代码我测试了,还是无法实现复制隐藏属性的文件,无论是系统的隐藏文件或者是用户的隐藏文件,只要属性是隐藏的,就是只能搜索而无法复制了。。。。

cmd下只是说“系统找不到指定类型的文件”。。。。

白色菜鸟一枚,真的不知道该咋改参数了。。。。

跪求您的帮助。。。
作者: broly    时间: 2012-6-5 18:46

回复 19# longmao


    用XCOPY
  1. @echo off
  2. if "%1" == "h" goto begin
  3. mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
  4. :begin
  5. set "des=%~dp0"
  6. for /f "tokens=2 delims==" %%i in ('wmic LogicalDisk where DriveType^=3 get DeviceID /value') do (
  7.   for /f "delims=" %%j in ('dir /b/a-d/s %%i\*.doc %%i\*.docx') do xcopy /h /y "%%j" "%des%"
  8. )
复制代码





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