找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 93506|回复: 34

[其他] [已解决]如何用批处理批量移动文件或文件夹?

[复制链接]
发表于 2010-4-5 13:10:15 | 显示全部楼层 |阅读模式
小弟想用一批处理批量移动文件或文件夹。例如:我在桌面上选中一大堆文件拖到该批处理文件上,则自动将这一大堆文件移动到d:\123文件夹中

请高手不吝赐教。谢谢。

[ 本帖最后由 smallbear 于 2010-4-5 19:49 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2010-4-5 13:17:39 | 显示全部楼层
我自己写了一个
  1. move %1 d:\123
复制代码
我把文件拖动到该批处理上发现它一次只能移动一个文件,而且不能移动文件夹。请高手写个更好的代码。谢谢。
发表于 2010-4-5 13:22:50 | 显示全部楼层
@echo off
if not exist "d:\123" md "d:\123"
move "%*" "d:\123"

如果确认"d:\123" 存在,可以不用if not exist "d:\123" md "d:\123"

[ 本帖最后由 hanyeguxing 于 2010-4-5 13:24 编辑 ]
 楼主| 发表于 2010-4-5 13:25:08 | 显示全部楼层
谢谢楼上的兄弟,我先试试。
 楼主| 发表于 2010-4-5 13:31:11 | 显示全部楼层
不行啊,还是只能移动一个文件,同样不能移动文件夹
发表于 2010-4-5 13:59:45 | 显示全部楼层
move不能跨分区移动文件夹
发表于 2010-4-5 14:07:16 | 显示全部楼层
原帖由 smallbear 于 2010-4-5 13:31 发表
不行啊,还是只能移动一个文件,同样不能移动文件夹

move在移动目录时,只能在同分区内操作
 楼主| 发表于 2010-4-5 14:15:11 | 显示全部楼层
那有没有其它办法?既能移动文件又能移动文件夹,而且能批量移动?
发表于 2010-4-5 14:21:23 | 显示全部楼层
原帖由 smallbear 于 2010-4-5 14:15 发表
那有没有其它办法?既能移动文件又能移动文件夹,而且能批量移动?

移动不是问题,麻烦的是你要支持拖放,还得支持路径及名称中有空格
 楼主| 发表于 2010-4-5 14:46:28 | 显示全部楼层
这里有一个,哪位高手帮我改一下
  1. @echo off
  2. if exist "%~1" (echo d|xcopy %1 /e /r /k "d:\123\%~n1" && rd /s /q %1) else (move /y %1 "d:\123")
  3. pause
复制代码
这个代码可以移动文件及文件夹,可惜一次只能移动一个,希望哪位高手给我改成一次移动多个文件。谢谢。
发表于 2010-4-5 14:55:39 | 显示全部楼层
 楼主| 发表于 2010-4-5 15:05:32 | 显示全部楼层
楼上给我的这个链接我试了一下,这个代码不能拖放。不知道别人试过没有,反正我的vista上不能拖放。
发表于 2010-4-5 15:38:00 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set "d=d:\123"
  3. if not exist "%d%" md "%d%"
  4. for /F "delims=" %%a in ("%*") do (set a=%%a
  5. set a=!a:"=/!
  6. set a=!a:/ /=/!
  7. call:han "!a!")
  8. for /F "delims=" %%i in (temp.h) do if exist "%%~i" (
  9. xcopy "%%i" /q /e /h /k /i "%d%\%%~ni">nul
  10. rd /s /q "%%i"
  11. ) else move "%%i" "%d%"
  12. del /q temp.h
  13. goto :eof
  14. :han
  15. set "i=%~1"&set n=0
  16. :ye
  17. if "!i:~%n%,1!"=="" goto :eof
  18. if "!i:~%n%,1!"=="/" (echo.>>temp.h)else set/p=!i:~%n%,1!<nul>>temp.h
  19. set/a n+=1&goto :ye
复制代码
在xp sp3下:
多目录拖放操作测试通过
多文件拖放操作测试通过
多目录及文件混合拖放操作测试通过
路径中含空格测试通过
批处理在运行中会产生临时文件temp.h并在结束前删除

评分

参与人数 1PB +5 收起 理由
Batcher + 5 乐于助人

查看全部评分

 楼主| 发表于 2010-4-5 15:55:50 | 显示全部楼层
先谢谢了。我试了一下,在vista中文件夹只能移动一个,文件可以移动多个。再到XP下试试。
发表于 2010-4-5 16:21:48 | 显示全部楼层
文件名不能含 & 符号
代码未测试,运行前请先做好备份!!!
:
  1. @echo off
  2. set "var=%*"
  3. cls
  4. for %%i in (%var%) do (
  5.    if not exist "%%~i" (
  6.       if not exist "%%~i" (
  7.          echo 没有 %%~i 文件(夹),请检查文件名是否含 ^& 符号
  8.        ) else (move "%%~i" "d:\123")
  9.      ) else (
  10.        if /i "%%~di"=="d:" (move "%%~i" "d:\123") else (
  11.           rem 移动文件夹
  12.           for /f "delims=" %%j in ('dir/b/s/a-d "%%~i\*.*"') do (
  13.               set "num=%%~dpj"
  14.               setlocal enabledelayedexpansion
  15.               set "num=d:\123!num:*%%~i=!"
  16.               if not exist "!num!" md "!num!"
  17.               move "%%~i\%%~nxj" "!num!"
  18.               endlocal
  19.           )
  20.           rd /s /q "%%~i"
  21.         )
  22.      )
  23. )
  24. pause
复制代码

[ 本帖最后由 FOR 于 2010-4-5 17:22 编辑 ]

评分

参与人数 1PB +5 收起 理由
Batcher + 5 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:48 , Processed in 0.022834 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表