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

[文件操作] 【已解决】求助:生成批处理文件

[复制链接]
发表于 2025-1-24 19:30:25 | 显示全部楼层 |阅读模式
本帖最后由 lj670 于 2025-1-26 01:19 编辑
  1. @echo off
  2. set "prefix=3(1)-"

  3. rem 处理 .mp3 文件
  4. for %%i in (*.mp3) do (
  5.     set "filename=%%~ni"
  6.     setlocal enabledelayedexpansion
  7.     if "!filename:~0,5!" neq "%prefix%" (
  8.         ren "%%i" "%prefix%%%i"
  9.     )
  10.     endlocal
  11. )

  12. rem 处理 .srt 文件
  13. for %%i in (*.srt) do (
  14.     set "filename=%%~ni"
  15.     setlocal enabledelayedexpansion
  16.     if "!filename:~0,5!" neq "%prefix%" (
  17.         ren "%%i" "%prefix%%%i"
  18.     )
  19.     endlocal
  20. )
复制代码
一个批量给mp3文件和srt文件添加"3(1)-"前缀的脚本,现在需要分别添加前缀"3(0)-""3(1)-""3(2)-""3(3)-""3(4)-"一直到"3(20)-",根据这个脚本批处理生成对应的bat文件,如:"3(0).bat"(添加前缀"3(0)-")"3(1).bat"(添加前缀"3(1)-")"3(2).bat"(添加前缀"3(2)-")等等,求助各位大佬,谢谢!
发表于 2025-1-24 22:03:43 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-1-25 11:35 编辑

回复 1# lj670

以下代码(任选一个方案)存为 test.bat 运行,与 *.mp3 或 *.srt 文件同目录
前缀 ‘m(n)-’ 中的 m 和 n 值均用命令行参数设定,例如 test.bat 3 2 用法会与楼主要求的 3(2).bat 等效,命令行参数不足会自动退出 ...
第一方案

  1. @echo off &if "%~2"=="" (exit/b) else set "p=%~1(%~2)-"
  2. for %%F in (*.mp3 *.srt) do for /f "delims=-" %%a in ("%%~nF") do if /i "%%a-" neq "%p%" ren "%%F" "%p%%%~nxF"
  3. pause&exit/b
复制代码
第二方案

  1. @echo off &if "%~2"=="" (exit/b) else set "p=%~1(%~2)-"
  2. for /f "delims=" %%F in ('dir /b/a-d *.mp3 *.srt^|findstr /ibv "%p%" ') do ren "%%F" "%p%%%~nxF"
  3. pause&exit/b
复制代码
 楼主| 发表于 2025-1-25 00:09:37 | 显示全部楼层
回复 2# aloha20200628


    我好像没有描述清楚,根据这个添加前缀"3(1)-"的脚本,bat批量生成添加前缀"3(1)-"脚本,添加前缀"3(2)-"脚本,添加前缀"3(3)-"脚本,添加前缀"3(4)-"脚本,一直到添加前缀"3(20)-"脚本,因为需要好多这种顺序的bat脚本,一个个复制后再修改参数太过麻烦,如:把"3(1)-"修改为"3(2)-"...直到"3(20)-"等等 "4(1)-"修改为"4(2)-"..."4(20)-"等等很多很多,想bat批处理直接生成,不知是否可行,谢谢!
发表于 2025-1-25 08:59:31 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-1-25 09:11 编辑

回复 3# lj670

2楼代码已订正》改为 m,n 两个命令行参数驱动,运行结果等效于对应的 m(n).bat 批处脚本...
发表于 2025-1-25 10:45:31 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-1-25 11:07 编辑

回复 1# lj670

再给一个版本存为 test-n.bat,其命令行参数用法为 test-n.bat m 其中参数 m 如 ‘m(n).bat’ 文件名格式中的定义,示例如下
   test-n.bat 3
运行结果会在当前目录下生成 3(1).bat,3(2).bat,...,3(20).bat 共20个批处脚本文件,其生成文件总数量(n 的最大值)由代码第三行括号中的数字 20 设定(可自定义)

  1. @echo off &if "%~1"=="" (set "p=1") else (set "p=%~1")
  2. setlocal enabledelayedexpansion &set "c3=%%%%~nxF"
  3. for /l %%n in (1,1,20) do (
  4.   set "c1=%p%(%%n)\-"
  5.   set "c2=%p%(%%n)-"
  6.   set "s=@for /f "delims=" %%%%F in ('dir /b/a-d *.mp3 *.srt^^|findstr /ibv "!c1!" ') do @ren "%%%%F" "!c2!!c3!""
  7.   set/p="!s!"<nul>"%p%(%%n).bat")
  8. pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
lj670 + 1 感谢分享

查看全部评分

 楼主| 发表于 2025-1-25 22:18:36 | 显示全部楼层
回复 5# aloha20200628


    测试完美,非常适合我,谢谢!
 楼主| 发表于 2025-1-25 22:27:00 | 显示全部楼层
5楼的版本非常适合我的需求,比较简洁直接,非常感谢!我的方案复杂一些,贴出来参考一下:
for i in range(21):
    prefix = f"3({i})-"
    script_content = f"""@echo off
set "prefix={prefix}"
rem 处理 .mp3 文件
for %%i in (*.mp3) do (
    set "filename=%%~ni"
    setlocal enabledelayedexpansion
    if "!filename:~0,{len(prefix)}!" neq "%prefix%" (
        ren "%%i" "%prefix%%%i"
    )
    endlocal
)
rem 处理 .srt 文件
for %%i in (*.srt) do (
    set "filename=%%~ni"
    setlocal enabledelayedexpansion
    if "!filename:~0,{len(prefix)}!" neq "%prefix%" (
        ren "%%i" "%prefix%%%i"
    )
    endlocal
)"""
    script_name = f"3({i})-.bat"
    with open(script_name, "w", encoding="ansi") as f:
        f.write(script_content)
    print(f"已生成脚本: {script_name}")
保存为py文件,运行后生成 3(0).bat,3(1).bat,3(2).bat,...,3(20).bat 共21个批处脚本文件.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 14:29 , Processed in 0.018974 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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