Board logo

标题: [文件操作] [已解决]复制文件的批处理不能运行? [打印本页]

作者: reddragon1314    时间: 2010-8-9 17:47     标题: [已解决]复制文件的批处理不能运行?

  1. for /f "delims= " %%i in ('dir e:\*.mp3 /od /s |find "2010"') do copy %%i e:\music\mp3\
复制代码

我想复制2010年后的MP3放到音乐文件夹里,但不知道哪地方不对。

[ 本帖最后由 reddragon1314 于 2010-8-11 07:58 编辑 ]
作者: hfg1977    时间: 2010-8-9 19:43

for /f "tokens=* delims=" %%I in ('dir /a-d/s/b "e:\*.mp3 /od" ^|find "2010"') do copy %%i e:\music\mp3\
作者: reddragon1314    时间: 2010-8-9 21:14

2楼的运行时提示 此时不应有%%i
作者: TX_kakashi    时间: 2010-8-9 21:28

稍微修改了下,应该符合lz要求了这一次
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :bof
  4. cls
  5. title %time%%date%
  6. set /p myFolder=[把需要整理的文件夹拖到这里并按Enter]:
  7. if not exist %myFolder%\ goto bof
  8. call :sortFolder %myFolder%
  9. echo 整理完毕,按任意键退出.
  10. pause>nul
  11. exit
  12. :sortFolder
  13. set mp3Count=0
  14. pushd "%~1"
  15. if not exist e:\music\mp3\nul md e:\music\mp3
  16. cd.>mp3List.txt
  17. cd.>copyList.txt
  18. title ^>^>^>Searching mp3 files in %~1...^<^<^<
  19. for /f "delims=" %%a in ('dir /s /b /a-d *.mp3') do (echo %%a#%%~ta>>mp3List.txt)
  20. title ^>^>^>Creating filtered mp3 list. ^<^<^<
  21. type mp3List.txt | find "2010" >>copyList.txt
  22. title ^>^>^>Copying mp3 files^<^<^<
  23. for /f "delims=#" %%a in (copyList.txt) do (set /a mp3Count=!mp3Count!+1 &&title Total Copied: [!mp3Count!]&& echo Copying [%%~a] && copy "%%~a" e:\music\mp3\ >nul )
  24. del copyList.txt >nul 2>nul
  25. del mp3List.txt >nul 2>nul
  26. exit/b
复制代码

[ 本帖最后由 TX_kakashi 于 2010-8-10 21:14 编辑 ]
作者: hfg1977    时间: 2010-8-10 02:14

  1. @echo off
  2. for /f "tokens=* delims=" %%I in ('dir /a-d/s/b/od "e:\*.mp3" ^|find "2010"') do copy %%i e:\music\mp3\
复制代码

作者: FOR    时间: 2010-8-10 02:35     标题: 回复 5楼 的帖子

  1. %%I  %%i
复制代码

作者: terse    时间: 2010-8-10 03:16

  1. @echo off
  2. xcopy /Y /D:1-1-2010 "E:\*.mp3" "E:\music\mp3\" >NUL 2>NUL
  3. pause
复制代码

作者: reddragon1314    时间: 2010-8-10 09:01

回7楼的。我运行了一下。不能遍历目录,加上 /S参数 也不能复制文件。
另外XCOPY好像必须复制目录吧,我只想复制文件。不想复制目录。
作者: reddragon1314    时间: 2010-8-10 09:05

5楼的代码也不能实现复制文件。
作者: renmingwu    时间: 2010-8-10 09:36

试了半天总提示此时不应该有 | ,不明白为什么,先去看下for语句。

[ 本帖最后由 renmingwu 于 2010-8-10 10:56 编辑 ]
作者: reddragon1314    时间: 2010-8-10 16:36

如果没有“|” 怎么来确定日期呢?
作者: TX_kakashi    时间: 2010-8-10 21:00

如果dir用了/b参数的话,可以简洁输出,比较利于用for /f "delims="命令读取路径以及文件名来进行copy.但是坏处是省略了很多有用的信息比方说文件时间,大小等信息,dir/ b后再用find "2010"是找不到文件时间的。但是如果没有/b参数的话,dir返回了过多的东西,比方说:
2010-08-02  20:03       325,779,631 29036_feralclaw2.mp4
for /f "delims="....的作用是读取每一行的全部内容,这样的话,你的%%i就包含了太多不必要的内容,以至于直接用copy %%i e:\  就变成了
copy 2010-08-02  20:03       325,779,631 29036_feralclaw2.mp4 e:\
所以lz的代码没有办法运行。
作者: reddragon1314    时间: 2010-8-10 22:20

12楼的 是不是可以通过。
for  /f   "tokens=4 delims= " 来实现 copy  29036_feralclaw2.mp4 e:\ 呢?
作者: terse    时间: 2010-8-11 02:35

  1. @echo off
  2. for /f "tokens=*" %%i in ('dir /a-d /s /b E:\*.mp3') do (
  3.    if "%%~ti" geq "2010" copy "%%i" ""E:\music\mp3\"" >NUL 2>NUL
  4. )
  5. pause
复制代码

作者: reddragon1314    时间: 2010-8-11 07:57

多谢 14楼的高手的代码。可以实现目的。




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