批处理之家's Archiver

Batcher 发表于 2022-5-24 10:38

[分享]批处理把几段重复的代码改成for循环

【问题描述】

[url=https://imgtu.com/i/XC8DVs][img]https://s1.ax1x.com/2022/05/24/XC8DVs.png[/img][/url]
这能搞循环么?[code]%Dism-10-X64% /Image:%Mount% /Set-Edition:CoreSingleLanguage
%Dism-10-X64% /Commit-Image /MountDir:%Mount%
%Wimlib-imagex-x64% info %Wimfile1%-bak.wim 1 "%Desc1% Home SL" "%Desc-EN-US%" --image-property DISPLAYNAME="%Desc1% Home SL" --image-property DISPLAYDESCRIPTION="%Desc-EN-US%" --image-property FLAGS="CoreSingleLanguage"
%Dism-10-X64% /Export-Image /SourceImageFile:%Wimfile1%-bak.wim /SourceIndex:1 /DestinationImageFile:%Wimfile1%.wim

%Dism-10-X64% /Image:%Mount% /Set-Edition:CloudEdition
%Dism-10-X64% /Commit-Image /MountDir:%Mount%
%Wimlib-imagex-x64% info %Wimfile1%-bak.wim 1 "%Desc1% CloudEdition" "%Desc-EN-US%" --image-property DISPLAYNAME="%Desc1% CloudEdition" --image-property DISPLAYDESCRIPTION="%Desc-EN-US%" --image-property FLAGS="CloudEdition"
%Dism-10-X64% /Export-Image /SourceImageFile:%Wimfile1%-bak.wim /SourceIndex:1 /DestinationImageFile:%Wimfile1%.wim

%Dism-10-X64% /Image:%Mount% /Set-Edition:Professional
%Dism-10-X64% /Commit-Image /MountDir:%Mount%
%Wimlib-imagex-x64% info %Wimfile1%-bak.wim 1 "%Desc1% Pro" "%Desc-EN-US%" --image-property DISPLAYNAME="%Desc1% Pro" --image-property DISPLAYDESCRIPTION="%Desc-EN-US%" --image-property FLAGS="Professional"
%Dism-10-X64% /Export-Image /SourceImageFile:%Wimfile1%-bak.wim /SourceIndex:1 /DestinationImageFile:%Wimfile1%.wim

%Dism-10-X64% /Image:%Mount% /Set-Edition:ProfessionalEducation
%Dism-10-X64% /Commit-Image /MountDir:%Mount%
%Wimlib-imagex-x64% info %Wimfile1%-bak.wim 1 "%Desc1% Pro Edu" "%Desc-EN-US%" --image-property DISPLAYNAME="%Desc1% Pro Edu" --image-property DISPLAYDESCRIPTION="%Desc-EN-US%" --image-property FLAGS="ProfessionalEducation"
%Dism-10-X64% /Export-Image /SourceImageFile:%Wimfile1%-bak.wim /SourceIndex:1 /DestinationImageFile:%Wimfile1%.wim

%Dism-10-X64% /Image:%Mount% /Set-Edition:ProfessionalSingleLanguage
%Dism-10-X64% /Commit-Image /MountDir:%Mount%
%Wimlib-imagex-x64% info %Wimfile1%-bak.wim 1 "%Desc1% Pro SL" "%Desc-EN-US%" --image-property DISPLAYNAME="%Desc1% Pro SL" --image-property DISPLAYDESCRIPTION="%Desc-EN-US%" --image-property FLAGS="ProfessionalSingleLanguage"
%Dism-10-X64% /Export-Image /SourceImageFile:%Wimfile1%-bak.wim /SourceIndex:1 /DestinationImageFile:%Wimfile1%.wim[/code]

Batcher 发表于 2022-5-24 10:38

【解决方案】[code]for /f "delims=:" %%i in ('findstr /n "^:DynamicScript$" "%~f0"') do (
    for /f "tokens=1-2 delims=:" %%j in ('more +%%i "%~f0"') do (
        %Dism-10-X64% /Image:%Mount% /Set-Edition:%%j
        %Dism-10-X64% /Commit-Image /MountDir:%Mount%
        %Wimlib-imagex-x64% info %Wimfile1%-bak.wim 1 "%%k" "%Desc-EN-US%" --image-property DISPLAYNAME="%%k" --image-property DISPLAYDESCRIPTION="%Desc-EN-US%" --image-property FLAGS="CoreSingleLanguage"
        %Dism-10-X64% /Export-Image /SourceImageFile:%Wimfile1%-bak.wim /SourceIndex:1 /DestinationImageFile:%Wimfile1%.wim

    )
)

goto :eof

REM 这段放在脚本的最下面
:DynamicScript
CoreSingleLanguage:%Desc1% Home SL
CloudEdition:%Desc1% CloudEdition
Professional:%Desc1% Pro
ProfessionalEducation:%Desc1% Pro Edu
ProfessionalSingleLanguage:%Desc1% Pro SL[/code]思路概括:
不变的部分,放在for循环里面。
变化的部分,提取出来放在一个配置文件里面,或者放在BAT自身的结尾。

类似用法:
[url]https://mp.weixin.qq.com/s/McvY4CiR-SYGaCha7lmjIw[/url]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.