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

[文件操作] 批处理如何自动按文件夹名称批量重命名各自的文件?

[复制链接]
发表于 2024-7-30 23:05:05 | 显示全部楼层 |阅读模式
本帖最后由 gan537519 于 2024-8-2 23:56 编辑

比如现在文件夹A,A里面有文件夹photo, document,  data,  other. 各个文件夹内有若干个文件。
那么在A里面双击bat后
photo里面的所有文件都加上前缀 picture
document里面的全部文件加上前缀 TX
data里面的全部文件加上前缀data
other的不处理。

包含当前目录和所有子目录下的文件都是这样处理。
发表于 2024-7-31 00:07:07 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. for %%a in ("_photo=picture" "_document=TX" "_data=data") do (
  4.         set %%~a
  5. )
  6. for /f "delims=" %%d in ('dir /b /ad') do (
  7.         if defined _%%d (
  8.                 for /f "delims=" %%i in ('dir /b /s /a-d "%%d\*"') do (
  9.                         call ren "%%i" "%%_%%d%%%%~nxi"
  10.                 )
  11.         )
  12. )
  13. pause
复制代码

自行测试...
发表于 2024-7-31 13:21:21 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-8-3 08:45 编辑

回复 1# gan537519

给一个不用自定义变量%var%的版本...

  1. @echo off &for %%d in (
  2.         "photo/picture"
  3.         "document/TX"
  4.         "data/data"
  5. ) do for /f "tokens=1-2 delims=/" %%a in ("%%~d") do (
  6.         pushd "%%a"
  7.         for /f "delims=" %%F in ('dir /b/a-d') do ren "%%F" "%%b_%%~nxF"
  8.         popd
  9. )
  10. pause&exit/b
复制代码
 楼主| 发表于 2024-8-2 22:07:20 | 显示全部楼层
回复  gan537519

给一个不用自定义变量%var%的版本...
aloha20200628 发表于 2024-7-31 13:21


谢谢。当前目录下的可以,子目录下文件的不行。大佬看下能不能帮忙弄下在子目录也自动执行这些规则,比如photo 文件夹里面还有文件夹photo,第二个photo里的文件也自动重命名。other里面有document,这个document里的文件也自动重命名。
 楼主| 发表于 2024-8-2 22:22:23 | 显示全部楼层
自行测试...
77七 发表于 2024-7-31 00:07



    谢谢。当前目录下的可以,子目录下的文件也自动按照根目录的执行,比如data里面有photo,photo的文件还是按data命名了。
大佬看下能不能帮忙弄下在子目录下的文件也自动按分类执行这些规则,比如data文件夹里面还有文件夹photo,这个photo里的文件自动重命名为picture。other里面有document,这个document里的文件也自动重命名TX。
发表于 2024-8-2 22:40:59 | 显示全部楼层
回复 5# gan537519


  
包含当前目录和所有子目录下的文件都是这样处理。
描述为 包含当前目录和所有子目录下的文件都是这样处理。是不是更为恰当?
  1. @echo off
  2. cd /d "%~dp0"
  3. for %%a in ("_photo=picture" "_document=TX" "_data=data") do (
  4.         set %%~a
  5. )
  6. for /f "delims=" %%d in ('dir /b /s /ad') do (
  7.         if defined _%%~nxd (
  8.                 for /f "delims=" %%i in ('dir /b /a-d "%%d\*"') do (
  9.                         call ren "%%d\%%i" "%%_%%~nxd%%%%~nxi"
  10.                 )
  11.         )
  12. )
  13. pause
复制代码


未测试。
 楼主| 发表于 2024-8-2 23:52:51 | 显示全部楼层
回复 6# 77七


    谢谢,测试可行。抱歉描述的不够准确。
 楼主| 发表于 2024-8-3 00:51:13 | 显示全部楼层
回复 6# 77七


    对了,前缀后应该有个"_", 但没有出来
发表于 2024-8-3 01:13:21 | 显示全部楼层
回复 8# gan537519


   %%~nxi指文件名,在前面加上就行。
发表于 2024-8-3 07:45:18 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-8-3 08:54 编辑

回复 4# gan537519

  1. @echo off &set "kwl=photo/picture/document/TX/data/data"
  2. for /f "delims=" %%F in ('dir /b/s/a-d') do (
  3.         set "_p=%%~pF"&setlocal enabledelayedexpansion
  4.         for %%p in ("!_p:~0,-1!") do for /f "delims=/" %%a in ("!kwl:*%%~nxp=!") do if /i "!kwl!" neq "!kwl:*%%~nxp=!" (ren "%%F" "%%a_%%~nxF")
  5.         endlocal
  6. )
  7. pause&exit/b
复制代码
发表于 2024-8-3 09:29:57 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-8-3 09:46 编辑


http://www.bathome.net/thread-69489-1-1.html 中3楼示例代码,验证 dir /b "c:\abc\123.txt\.." 可锚定目标文件 123.txt 所在目录,进一步可用
    for %%P in ("c:\abc\123.txt\..") do set "p=%%~nxP"
直接提取目标文件 123.txt 所在目录名(没有尾部路径分隔符),据此可对10楼代码再造一个版本...

  1. @echo off &set "kwl=photo/picture/document/TX/data/data"
  2. for /f "delims=" %%F in ('dir /b/s/a-d') do (
  3.         set "_p=%%~pF"&setlocal enabledelayedexpansion
  4.         for %%P in ("%%F\..") do for /f "delims=/" %%a in ("!kwl:*%%~nxP=!") do if /i "!kwl!" neq "!kwl:*%%~nxP=!" (echo,ren "%%F" "%%a_%%~nxF")
  5.         endlocal
  6. )
  7. pause&exit/b
复制代码
 楼主| 发表于 2024-8-3 14:28:49 | 显示全部楼层
回复 9# 77七


    3Q
 楼主| 发表于 2024-8-3 14:29:09 | 显示全部楼层
回复 10# aloha20200628


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

本版积分规则

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

GMT+8, 2026-3-17 20:39 , Processed in 0.018505 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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