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

[文件操作] 文件批量改名的问题求助(较复杂)

[复制链接]
发表于 2011-9-14 22:49:07 | 显示全部楼层 |阅读模式
假设XYZ目录下子结构如下
XYZ
-AAA(子目录)
------aaa.txt

-BBB(子目录)
------bbb.txt
------123456(二级子目录)
------------ddd.txt

-CCC(子目录)
------ccc.txt

现在要遍历XYZ下所有目录 如果XYZ下类似ddd的二级子目录内有文件
则将文件名改为ddd@1234.txt(ddd@当前目录名的前4个字符)并且移动到一级子目录下,之后删除二级子目录。
处理后文件结构如下。

XYZ
-AAA
------aaa.txt
-BBB
------bbb.txt
------ddd@1234.txt
-CCC
------ccc.txt

请各位大侠帮忙。
发表于 2011-9-15 09:27:48 | 显示全部楼层
本帖最后由 hfg1977 于 2011-9-15 09:31 编辑

仅仅是繁琐谈不上复杂, P基础学好了就可解决.
下面是不够严谨的方案:

  1. @echo off
  2. setlocal enabledelayedexpansion&cls
  3. :start ============================================================
  4. for /f "tokens=* delims=" %%a in ('dir /ad/s/b "xyz"') do (
  5. pushd "%%~a.\..\.."&(for %%i in ("!cd!") do set "_path=%%~ni")&popd
  6. if /i "!_path!"=="xyz" (echo 改名&echo 移动&echo 删除)
  7. )
复制代码
发表于 2011-9-15 12:02:54 | 显示全部楼层
本帖最后由 caruko 于 2011-9-15 12:09 编辑

  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. set "rpath=d:\xyz"
  3. for /r "%rpath%" %%a in (*) do (
  4.         set "p=%%~dpa"
  5.         set "p=!p:%rpath%=!"
  6.         call :change "%%a!p:\=" "!"&&rmdir "%%~dpa" 2>nul
  7. )
  8. pause>nul
  9. goto :eof

  10. :change
  11. if not %~3.==. (
  12.         set "name=%~n1"
  13.         set "name=!name:~0,4!"
  14.         set newname=%~3@!name!%~x1
  15.         echo,move %1 "%rpath%\%~2\!newname!"
  16.         exit /b 0
  17. )
  18. exit /b 1
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 00:19 , Processed in 0.016739 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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