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

[文件操作] ***为什么批处理代码只能修改文件夹名称不能修改各种类型文件名称

[复制链接]
发表于 2026-2-11 12:22:39 | 显示全部楼层 |阅读模式
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

:: 定义随机字符串长度
set "length=8"

:: 先处理子文件夹
for /d /r %%i in (*) do (
    :: 生成随机字符串
    set "rand="
    for /l %%j in (1,1,!length!) do (
        set "chars=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        set /a "randnum=!random!%%62"
        for %%k in (!randnum!) do set "rand=!rand!!chars:~%%k,1!"
    )
    :: 获取文件夹所在路径和原名称
    set "folderpath=%%~dpi"
    set "foldername=%%~nxi"
    :: 避免重命名当前脚本所在目录
    if not "!folderpath!!foldername!"=="%~dp0." (
        :: 重命名文件夹
        ren "%%i" "!rand!" >nul 2>&1
    )
)

:: 处理文件
for /r %%i in (*) do (
    :: 跳过当前批处理文件
    if not "%%~nxi"=="%~nx0" (
        :: 生成随机字符串
        set "rand="
        for /l %%j in (1,1,!length!) do (
            set "chars=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
            set /a "randnum=!random!%%62"
            for %%k in (!randnum!) do set "rand=!rand!!chars:~%%k,1!"
        )
        :: 保留文件扩展名
        ren "%%i" "!rand!%%~xi" >nul 2>&1
    )
)

endlocal
echo 重命名完成!
pause >nul
发表于 2026-2-11 16:52:22 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-2-12 12:51 编辑

回复 1# zsww258

系统不允许文件更名的常见情况如下:
一。文件被占用
二。文件被权限保护
三。有重名文件存在
针对第三者可试用以下代码解决...
另:遵循批处理脚本编写规范,建议将复合代码块(典型如 for 和 if 语句)中的注释行前缀 :: 改为 rem 为妥...

  1. @echo off &setlocal enabledelayedexpansion &set "length=8"
  2. :: 因文件名不区分大小写,以下字符集可减为36个
  3. set "chars=0123456789abcdefghijklmnopqrstuvwxyz"
  4. :: 仅处理文件
  5. for /r %%i in (*) do (
  6.     rem 跳过当前批处理文件
  7.     if not "%%~nxi"=="%~nx0" call :xxx "%%i" )
  8. pause&exit/b
  9. :xxx
  10.    :: 生成随机字符串
  11.    set "rand="
  12.    for /l %%j in (1,1,!length!) do (
  13.       set /a "randnum=!random!%%36"
  14.       for %%k in (!randnum!) do set "rand=!rand!!chars:~%%k,1!" )
  15.    :: 保留文件扩展名
  16.    if exist "%~dp1!rand!%~x1" goto :xxx
  17.    ren "%~1" "!rand!%~x1" &exit/b
复制代码
发表于 2026-2-12 13:17:35 | 显示全部楼层
回复 1# zsww258

还有一种文件更名时常见的报错情况》是启用延迟变量后,路径文件名中包含了如 !^& 等特殊字符,如是,须改用以下代码解决...

  1. @echo off &setlocal &set "length=8"
  2. :: 因文件名不区分大小写,以下字符集可减为36个
  3. set "chars=0123456789abcdefghijklmnopqrstuvwxyz"
  4. :: 仅更名文件
  5. for /r %%i in (*) do (
  6.     rem 跳过当前批处理文件
  7.     if not "%%~nxi"=="%~nx0" (
  8.        set "F=%%i" &set "pF=%%~dpi" &set "xF=%%~xi"
  9.        setlocal enabledelayedexpansion
  10.        call :xxx &endlocal ))
  11. pause&exit/b
  12. :xxx
  13.    :: 生成随机字符串
  14.    set "rand="
  15.    for /l %%j in (1,1,!length!) do (
  16.       set /a "randnum=!random!%%36"
  17.       for %%k in (!randnum!) do set "rand=!rand!!chars:~%%k,1!" )
  18.    :: 保留文件扩展名
  19.    if exist "!pF!!rand!!xF!" goto :xxx
  20.    ren "!F!" "!rand!!xF!" &exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:08 , Processed in 0.017783 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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