2016-11-23 57 views
1

我有一個文件夾中的.XML文件的腳本。腳本可以運行並使用.XML文件工作。腳本能夠從任何文件夾運行

現在,這個腳本只能運行,如果我把這個文件夾放在桌面上,但我希望能夠從計算機的任何地方運行它,只要這兩個文件都在這個目錄下目錄的名稱不會改變。

我該怎麼做?

這裏是我的腳本:

<# Makes a copy of a former file and replaces content of a <serviceNumber> tag with a name of the copied file #> 
$SetCount = Read-Host -Prompt "How many copies do you need" 
$name = 420566666000 
for ($i=1; $i -le $SetCount; $i++) 
{ 
$name++  
Copy-Item $env:USERPROFILE\Desktop\numbers\420566666000.xml $env:USERPROFILE\Desktop\numbers\$name.xml 
(Get-Content $env:USERPROFILE\Desktop\numbers\$name.xml).replace('420566666000', $name) | Set-Content $env:USERPROFILE\Desktop\numbers\$name.xml 
} 
+1

分享你的腳本與我們聯繫,我們可以幫你 –

+0

我已經加入我的腳本本身就是問題。 Hoverer,我想知道一般如何解決這個問題,不僅僅是爲了這個特定的腳本,儘管這也會有所幫助:) – Blu3Rat

回答

0

我們將不能夠回答你的問題,而無需腳本。在gernal,你必須檢查你的腳本硬編碼路徑,並與您確定腳本目錄的Join-Path替換它們:

<# Makes a copy of a former file and replaces content of a <serviceNumber> tag with a name of the copied file #> 
$SetCount = Read-Host -Prompt "How many copies do you need" 

$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition 

$name = 420566666000 
for ($i=1; $i -le $SetCount; $i++) 
{ 
$name++  
Copy-Item (Join-Path $scriptPath '420566666000.xml') (Join-Path $scriptPath "$name.xml") 
(Get-Content (Join-Path $scriptPath "$name.xml")).replace('420566666000', $name) | Set-Content (Join-Path $scriptPath "$name.xml") 
} 

此外,您還可以提高你的腳本了很多。你可以閱讀文件的內容一次,它存儲在一個變量和更換/設置內容爲每個複製要:

$SetCount = Read-Host -Prompt "How many copies do you need" 
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition 

$name = 420566666000 
$fileContent = Get-Content (Join-Path $scriptPath '420566666000.xml') -Raw 

for ($i=1; $i -le $SetCount; $i++) 
{ 
    $name++; 
    $fileContent -replace '420566666000', $name | Set-Content (Join-Path $scriptPath "$name.xml") 
} 
+0

感謝你們對我們的建議以及改進我的腳本。你是對的,閱讀文件的內容一旦變得更有意義。我還會讀一下'Split-Path' /'Join-Path'我不知道如何正確使用它們。 – Blu3Rat

+1

請注意,使用'$ MyInvocation'只能從腳本的頂層使用。你不能以相同的方式從函數中使用它(因爲調用是_function_調用,不再是腳本調用)。所以在這種情況下,它可以工作,但只要他們試圖通過創建一個「Get-ScriptPath」函數來抽象出一些東西,它就會停止工作。 – Joey

1

您可以獲取有關當前通過$PSCommandPath運行腳本的信息:

Split-Path -Parent $PSCommandPath 

然後,您可以通過Join-Path結合起來,與您的XML文件名:

$scriptPath = Split-Path -Parent $PSCommandPath 
$xmlPath = Join-Path $scriptPath foo.xml