[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
根据2楼代码修改,需移动的文件夹重命名为“上一级文件夹名-移动前文件夹名”
  1. @echo off
  2. for /r /d %%a in (*) do (
  3.     dir /b /ad "%%a" | findstr . >nul || (
  4.         for %%i in ("%%a\..") do move "%%a" "%%~dpa\..\%%~nxi-%%~na"
  5.     )
  6. )
  7. pause&exit
复制代码
1

评分人数

    • 001011: 感谢 辛苦了技术 + 1

TOP

本帖最后由 qixiaobin0715 于 2020-10-6 09:07 编辑

回复 10# 001011

如果只是最后一级文件夹及上一级文件夹重名的话,代码已获得最后一级文件夹及上一级文件夹,还不是想移就移,想改就改,想删就删,只是不知你具体的文件结构。最后一级文件夹及上一级文件夹重名可用if判断一下,根据你自己的实际需求修改代码。
还有一个办法就是分步走:
1.运行上面代码移动文件夹
2.删除空文件夹,论坛里有的
3.还原改名的文件夹,用类似str=!str:*-=!的结构
不就是运行三个批处理吗,也不是太麻烦。这样还不容易出错。

如果像你在一楼所列移动文件夹,A\1和A\2,B\1和B\2不但存在上下级重名,还存在同级重名的话,就必须更改需移动的文件夹名了。

TOP

抱歉,楼上帖子中有点想当然。实测循环过程中更改中间级文件夹的名称不可行(for循环开始时已将所有路径规划好),改名后路径变化,会出现提示“系统找不到指定的文件”。还是分步处理的好。

TOP

回复 16# 001011
由于批处理运行时是按顺序一行行执行的,上面所说的三步可以写在一个批处理里面。
  1. @echo off
  2. for /r /d %%a in (*) do (
  3.     dir /b /ad "%%a" | findstr . >nul || (
  4.         for %%i in ("%%a\..") do move "%%a" "%%~dpa\..\%%~nxi_%%~na" >nul
  5.     )
  6. )
  7. for /f "delims=" %%m in ('dir /ad /b /s^|sort /r') do rd "%%m" 2>nul
  8. setlocal enabledelayedexpansion
  9. for /r /d %%n in (*) do (
  10.     dir /b /ad "%%n" | findstr . >nul || (
  11.         set var=%%n
  12.         set var=!var:*_=!
  13.         ren "%%n" "!var!"
  14.     )
  15. )
  16. pause&exit
复制代码
1

评分人数

    • 001011: 非常好用 感谢啊技术 + 1

TOP

返回列表