使用cmd查找和替换变量

时间:2017-11-08 19:36:13

标签: powershell batch-file cmd

我想用另一个变量字符串替换文件中的特定字符串。 我有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替换为角度=。(空)

2 个答案:

答案 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 (
如果文件路径包含空格,

也可以。