小弟我想利用變數(我從batch傳值過去ps1)來自動取代文字檔裡的文字
ps1內容如下:
$a=$args[0]
$b=$args[1]
(Get-Content -path C:\Program Files\BRAINBURST\res\tool_u.ini) -replace $a, $b | Set-Content -Encoding UTF8 C:\Program Files\BRAINBURST\res\tool_u.ini
但是出現以下錯誤:
Get-Content : 找不到接受引數 'Files\BRAINBURST\res\tool_u.ini' 的位置參數。
位於 C:\Program Files\BRAINBURST\res\DIFDIR.ps1:8 字元:2
+ CategoryInfo : InvalidArgument: (:) [Get-Content],ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand
請問有大大有解的嗎?
重新模擬 LAB 如下,有修改部份指令,已實測成功
bat檔
@echo off
set JDK_Version=1.8
for /d %%i in ("%ProgramFiles%\Java\jdk%jdk_Version%*") do (set Located=%%i)
set JAVA_HOME=%Located%
SET SC=C:\Program Files\Java\jdk1.8.0_181
REM 將值存成文字檔,方便 powershell呼叫
md c:\programdata
md c:\programdata\tmp
echo %SC%>c:\programdata\tmp\sc.txt
echo %JAVA_HOME%>c:\programdata\tmp\jh.txt
REM 如果兩個資料夾不相等,就執行REPLACE的部份
if "%JAVA_HOME%" NEQ "%SC%" goto REPLACE
else goto END
:REPLACE
powershell.exe -ExecutionPolicy Bypass -File "C:\Program Files\BRAINBURST\res\DIFDIR.ps1"
:END
echo SC=%SC%
echo JHOME=%JAVA_HOME%
echo done!!
DIFDIR.ps1
#gc=Get-Content
$a=gc c:\programdata\tmp\sc.txt
$b=gc c:\programdata\tmp\jh.txt
$c=gc 'C:\Program Files\BRAINBURST\res\tool_u.ini'
#主要問題出在下面這行 replace
$c.replace($a, $b) | Set-Content -Encoding UTF8 'C:\Program Files\BRAINBURST\res\tool_u.ini'
加了引號以後還是一樣... (((炸
規則運算式模式 C:\Program Files\Java\jdk1.8.0_181 無效。
位於 C:\Program Files\BRAINBURST\res\DIFDIR.ps1:8 字元:1
+ CategoryInfo : InvalidOperation: (C:\Program Files\Java\jdk1.8.0_181:String) [],RuntimeException
+ FullyQualifiedErrorId : InvalidRegularExpression
抱歉這麼晚才回
這問題好像是卡在PS比較的部分
我猜它"可能"是不能含有空格
所以我找到了另外一個替代方案
可以利用PS建一個FUNCTION從右至左去三碼版本號碼
https://ss64.com/ps/right.html
這樣實測沒有問題