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

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

本帖最后由 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)-")等等,求助各位大佬,谢谢!

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个批处脚本文件.

TOP

回复 5# aloha20200628


    测试完美,非常适合我,谢谢!

TOP

本帖最后由 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

评分人数

    • lj670: 感谢分享技术 + 1

TOP

本帖最后由 aloha20200628 于 2025-1-25 09:11 编辑

回复 3# lj670

2楼代码已订正》改为 m,n 两个命令行参数驱动,运行结果等效于对应的 m(n).bat 批处脚本...

TOP

回复 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批处理直接生成,不知是否可行,谢谢!

TOP

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

TOP

返回列表