我想用另一个变量字符串替换文件中的特定字符串。 我有100个名为attack_1的文件,只包含一个数字的attack_100。 我还有一个文件名是1.dat 我有一个字符串" angle = 5"在1.dat文件中,我想用非特定字符串替换它,但用" angle = variable"该变量是每个attack.txt文件中的数字。 我写了两种批处理,但他们都不能这样做。
for /l %%x in (1, 1, 100) do (
echo %%x
set /p a=<C:\Users\amirhosssein\Desktop\airfoil\batch\JOU\attack_%%x.txt
%a%
powershell -Command "(gc 1.dat) -replace 'airfoilmesh', 'airfoilmesh_%%x' -
replace 'angle=5','angle=%a%' | Out-File Okjou%%x.jou"
)
还有这个
cd "C:\Users\amirhosssein\Desktop\airfoil\batch\JOU"
for /l %%x in (1, 1, 100) do (
echo %%x
powershell -command "$amir=Get-Content attack_%%x.txt"
powershell -command "Write-Output amir"
powershell -Command "(gc 1.dat) -replace 'airfoilmesh', 'airfoilmesh_%%x' -
replace 'angle=5','angle=%amir%' | Out-File Okjou%%x.jou"
)
他们没有运作良好。他们替换但是角度= 5替换为角度=。(空)
答案 0 :(得分:0)
如前所述,在PowerShell中完成所有操作将是一个好主意。
Set-Location 'C:\Users\amirhosssein\Desktop\airfoil\batch\JOU'
$f = Get-Content 1.dat
1..100 |
$amir = Get-Content -Path attack_$_.txt
$f -replace 'airfoilmesh', "airfoilmesh_$amir" -replace 'angle=5', "angle=$amir" |
Out-File -FilePath "Okjou$amir.jou" -Encoding ASCII
答案 1 :(得分:0)
for /l %%x in (1, 1, 100) do (
echo %%x
for /f "usebackq" %%a in ("C:\Users\amirhosssein\Desktop\airfoil\batch\JOU\attack_%%x.txt") do (
powershell -Command "(gc 1.dat) -replace 'airfoilmesh', 'airfoilmesh_%%x' -
replace 'angle=5','angle=%%a' | Out-File Okjou%%x.jou"
)
)
使用您的混合方法。
请注意,您的代码由于delayed expansion
陷阱而失败(有关此问题的文章很多),因此%a%
将被 nothing 替换为a
未在for
循环的开头设置。
在此替换中,%%a
被分配了attack
文件中的值,因此%%a
,而非%a%
需要用作angle
。仅当攻击文件名为&#34;引用&#34;时才需要usebackq
,并且仅当文件路径包含空格时才需要引用,因此
for /f %%a in (C:\Users\amirhosssein\Desktop\airfoil\batch\JOU\attack_%%x.txt) do (
如果文件路径不包含空格,也可以。