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

[文件操作] 批处理脚本实现将与 BAT 文件同路径下的文件夹移动到指定路径

[复制链接]
发表于 2024-9-27 10:06:43 | 显示全部楼层 |阅读模式
@echo off
setlocal enabledelayedexpansion

rem 获取当前批处理文件所在路径
set "currentPath=%~dp0"

rem 指定目标文件夹路径
set "targetFolder=C:\your\target\folder\path"

rem 遍历当前路径下的文件夹
for /d %%i in ("%currentPath%\*") do (
    rem 获取文件夹名称
    set "folderName=%%~nxi"
    rem 拼接目标路径
    set "newPath=%targetFolder%\!folderName!"
    rem 移动文件夹
    move "%%i" "!newPath!"
)

echo 移动完成。
pause

执行后显示拒绝访问,移动了0个目录
请问应如何改写?谢谢
发表于 2024-9-27 11:28:01 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-9-27 14:18 编辑

回复 1# 无我居士
跨盘区移动目录会让 move 罢工,改用 robocopy 可一步到位,robocopy 默认用8个线程开工,效率会倍增...

  1. @echo off
  2. set "currentPath=%~dp0"
  3. set "targetFolder=C:\your\target\folder\path"
  4. cd /d ".."
  5. robocopy "%currentPath:~,-1%" "%targetFolder%" /s /move /xF "%~f0"
  6. pause&exit/b
复制代码
发表于 2024-9-27 13:44:06 | 显示全部楼层
  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. rem 指定目标文件夹路径
  5. set "targetFolder=C:\your\target\folder\path"

  6. rem 遍历当前路径下的文件夹
  7. for /d %%d in (*) do (
  8.         robocopy "%%d" "%targetFolder%\%%d" /e /move
  9. )
  10. echo 移动完成。
  11. pause
复制代码
发表于 2024-9-27 14:22:55 | 显示全部楼层
回复 2# aloha20200628

对2楼代码作了一点订正,运行结果会保留批处脚本文件所在的目录和该脚本文件
发表于 2024-9-27 15:21:12 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-9-28 09:08 编辑

回复 1# 无我居士

一楼的代码精简后也可以用(如下),但须注意被移动目录不能还有其他程序占用:

  1. @echo off
  2. set "currentPath=%~dp0"
  3. set "targetFolder=C:\your\target\folder\path"
  4. for /d %%d in ("%currentPath%*") do move "%%d" "%targetFolder%\%%~nxd"
  5. pause&exit/b
复制代码
补一个更正》用 move 移动实际是更名操作,并非物理移动,效率也很高,但限于同盘区操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 18:15 , Processed in 0.016308 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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