
标题: [文件操作] 【已解决】求助:生成批处理文件 [打印本页]
作者: lj670 时间: 2025-1-24 19:30 标题: 【已解决】求助:生成批处理文件
本帖最后由 lj670 于 2025-1-26 01:19 编辑
- @echo off
- set "prefix=3(1)-"
-
- rem 处理 .mp3 文件
- for %%i in (*.mp3) do (
- set "filename=%%~ni"
- setlocal enabledelayedexpansion
- if "!filename:~0,5!" neq "%prefix%" (
- ren "%%i" "%prefix%%%i"
- )
- endlocal
- )
-
- rem 处理 .srt 文件
- for %%i in (*.srt) do (
- set "filename=%%~ni"
- setlocal enabledelayedexpansion
- if "!filename:~0,5!" neq "%prefix%" (
- ren "%%i" "%prefix%%%i"
- )
- endlocal
- )
复制代码
一个批量给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)-")等等,求助各位大佬,谢谢!
作者: aloha20200628 时间: 2025-1-24 22:03
本帖最后由 aloha20200628 于 2025-1-25 11:35 编辑
回复 1# lj670
以下代码(任选一个方案)存为 test.bat 运行,与 *.mp3 或 *.srt 文件同目录
前缀 ‘m(n)-’ 中的 m 和 n 值均用命令行参数设定,例如 test.bat 3 2 用法会与楼主要求的 3(2).bat 等效,命令行参数不足会自动退出 ...
第一方案- @echo off &if "%~2"=="" (exit/b) else set "p=%~1(%~2)-"
- for %%F in (*.mp3 *.srt) do for /f "delims=-" %%a in ("%%~nF") do if /i "%%a-" neq "%p%" ren "%%F" "%p%%%~nxF"
- pause&exit/b
复制代码
第二方案- @echo off &if "%~2"=="" (exit/b) else set "p=%~1(%~2)-"
- for /f "delims=" %%F in ('dir /b/a-d *.mp3 *.srt^|findstr /ibv "%p%" ') do ren "%%F" "%p%%%~nxF"
- pause&exit/b
复制代码
作者: lj670 时间: 2025-1-25 00:09
回复 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批处理直接生成,不知是否可行,谢谢!
作者: aloha20200628 时间: 2025-1-25 08:59
本帖最后由 aloha20200628 于 2025-1-25 09:11 编辑
回复 3# lj670
2楼代码已订正》改为 m,n 两个命令行参数驱动,运行结果等效于对应的 m(n).bat 批处脚本...
作者: aloha20200628 时间: 2025-1-25 10:45
本帖最后由 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 设定(可自定义)- @echo off &if "%~1"=="" (set "p=1") else (set "p=%~1")
- setlocal enabledelayedexpansion &set "c3=%%%%~nxF"
- for /l %%n in (1,1,20) do (
- set "c1=%p%(%%n)\-"
- set "c2=%p%(%%n)-"
- set "s=@for /f "delims=" %%%%F in ('dir /b/a-d *.mp3 *.srt^^|findstr /ibv "!c1!" ') do @ren "%%%%F" "!c2!!c3!""
- set/p="!s!"<nul>"%p%(%%n).bat")
- pause&exit/b
复制代码
作者: lj670 时间: 2025-1-25 22:18
回复 5# aloha20200628
测试完美,非常适合我,谢谢!
作者: lj670 时间: 2025-1-25 22:27
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个批处脚本文件.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |