このタスクをバッチで実行する理由がわかりません。VBScript、JScript、またはおそらく PowerShell などの別のスクリプト言語を使用すると、はるかに簡単になります。
しかし、これはネイティブのバッチ ソリューションです。私のソリューションでは、各コマンドのオプションの順序について何も仮定していません。before と after の両方で任意の数のオプションを使用できます/port:nnnn
。
@echo off
setlocal enableDelayedExpansion
::read the line from textfile1
set "str="
<"textfile1.txt" set /p "str="
if not defined str exit /b
::enclose each command in quotes
set "str="!str:,=","!""
::extract the port from each command into an array
set /a n=0
for %%A in (!str!) do (
set "cmd=%%~A"
set /a n+=1
for /f %%B in ("!cmd:*port:=!") do set "port!n!=%%B"
)
::read the line from textfile2
set "str="
<"textfile2.txt" set /p "str="
if not defined str exit /b
::enclose each command in quotes
set "str="!str:,=","!""
::process each command
set /a n=0
set "ln="
for %%A in (!str!) do (
set "cmd=%%~A"
REM break the command into 2 parts, discarding port:
REM %%B = before port
REM %%E = after port
for /f "tokens=1* delims=," %%B in ("!cmd:port:=,!") do (
for /f "tokens=1*" %%D in ("%%C") do (
set /a n+=1
REM transfer !n! into %%N
for %%N in (!n!) do (
REM build the new line
set "ln=!ln!,%%B port:!port%%N! %%E"
)
)
)
)
::remove space before comma
set "ln=!ln: ,=,!"
::write the result back to textfile2
>"textfile2.txt" echo !ln:~1!