[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 gan537519 于 2024-8-2 23:56 编辑

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

包含当前目录和所有子目录下的文件都是这样处理。

回复 10# aloha20200628


    3Q

TOP

回复 9# 77七


    3Q

TOP

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

TOP

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

TOP

回复 8# gan537519


   %%~nxi指文件名,在前面加上就行。
bat小白,请多指教!谢谢!

TOP

回复 6# 77七


    对了,前缀后应该有个"_", 但没有出来

TOP

回复 6# 77七


    谢谢,测试可行。抱歉描述的不够准确。

TOP

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


未测试。
bat小白,请多指教!谢谢!

TOP

自行测试...
77七 发表于 2024-7-31 00:07



    谢谢。当前目录下的可以,子目录下的文件也自动按照根目录的执行,比如data里面有photo,photo的文件还是按data命名了。
大佬看下能不能帮忙弄下在子目录下的文件也自动按分类执行这些规则,比如data文件夹里面还有文件夹photo,这个photo里的文件自动重命名为picture。other里面有document,这个document里的文件也自动重命名TX。

TOP

回复  gan537519

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


谢谢。当前目录下的可以,子目录下文件的不行。大佬看下能不能帮忙弄下在子目录也自动执行这些规则,比如photo 文件夹里面还有文件夹photo,第二个photo里的文件也自动重命名。other里面有document,这个document里的文件也自动重命名。

TOP

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

TOP

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

自行测试...
bat小白,请多指教!谢谢!

TOP

返回列表