Board logo

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

作者: 无我居士    时间: 2024-9-27 10:06     标题: 批处理脚本实现将与 BAT 文件同路径下的文件夹移动到指定路径

@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个目录
请问应如何改写?谢谢
作者: aloha20200628    时间: 2024-9-27 11:28

本帖最后由 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
复制代码

作者: 77七    时间: 2024-9-27 13:44

  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
复制代码

作者: aloha20200628    时间: 2024-9-27 14:22

回复 2# aloha20200628

对2楼代码作了一点订正,运行结果会保留批处脚本文件所在的目录和该脚本文件

作者: aloha20200628    时间: 2024-9-27 15:21

本帖最后由 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 移动实际是更名操作,并非物理移动,效率也很高,但限于同盘区操作。





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