2012-09-22 61 views
0

我是PowerShell的新手,我需要一些幫助。下面是我寫的用於查找文件夾中的excel文件的腳本。 Excel表格中的文件將與同一臺機器上另一個文件夾的內容進行比較。位置是:「C:\ MKS_DEV \」,結果匹配的文件將被壓縮並放在另一個位置,如腳本中所示。這些腳本將被不同機器上的其他人使用,因此這兩個文件夾的位置可能在不同的機器上有所不同。使用Powershell中的參數分配文件夾位置

我想寫一個參數或使用兩個文件夾的位置參數,這樣我就不必指定位置所有的時間我必須運行腳本,並不能找出如何實現這一點。

這些腳本完美地工作,但我只需要將參數/參數合併到其中。任何幫助將非常感激。

謝謝。

下面是代碼:

# Creating an object for the Excel COM addin 
$ExcelObject = New-Object -ComObject Excel.Application 

# Opening the Workbook 
$ExcelWorkbook = $ExcelObject.Workbooks.Open("C:\Eric_Source\Test.xls") 

# Opening the Worksheet by using the index (1 for the first worksheet) 
$ExcelWorksheet = $ExcelWorkbook.Worksheets.Item(1) 

# The folder where the files will be copied/The folder which will be zipped 
# later 
$a = Get-Date 

$targetfolder = "C:\"+$a.Day+$a.Month+$a.Year+$a.Hour+$a.Minute+$a.Second 

# Check if the folder already exists. Command Test-Path $targetfolder returns 
# true or false. 
if(Test-Path $targetfolder) 
{ 
    # delete the folder if it already exists. The following command deletes a 
    # particular directory 
    Remove-Item $targetfolder -Force -Recurse -ErrorAction SilentlyContinue 
} 

# The following command is used to create a particular directory 
New-Item -ItemType directory -Path $targetfolder 

# Declaration of variables, COlumn value = 6 for Column F 
$row = 1 
$col = 6 

# Read a value from the worksheet with the following command 
$filename = $ExcelWorksheet.Cells.Item($row,$col).Value2 
$filename 

# change the folder value below to specify the folder where the powershell 
# needs to search for the filename that it reads from excel file. 

$folder = "C:\MKS_DEV\" 
$null = "" 
+1

請注意代碼格式化。 –

+0

您是否希望腳本具有默認值對於test.xls,或者您是否希望腳本在本地計算機上搜索test.xls,或者您是否希望腳本查看它從哪個文件夾運行名爲test.xls的文件,例如,如果腳本位於文件夾c:\ justin腳本將知道它的根文件夾是c:\ justin,如果將腳本移動到d:\ mike,則在該文件夾中查找test.xls知道它在d:\ mike文件夾中,並在該文件夾中查找test.xls。 – justinf

+0

感謝Justinf,我想我會希望腳本具有默認值。 excel位置:(「C:\ Eric_Source \ Test。XLS「)和其他文件夾位置:」 C:\ MKS_DEV \ 這些文件夾的位置將在不同的機器上改變,所以我想用參數/參數,以便該位置將不會被硬編碼,並可以在不同的設備上,無需使用指定位置的所有時間。 – Baykes75

回答

1

你有多種方式來參數腳本。

第一個是美元$ args [n] [自動變量] 1。 如果你的腳本被稱爲MyScript.PS1你可以把它叫做:

MyScript.PS1 "C:\Eric_Source\Test.xls" 

那麼你的腳本中使用$args[0]的第一個參數。

另一種方法是使用保留字帕拉姆在腳本的開頭:

Param ($MyParam1, $MyParam2) 

當你打電話給你的腳本$MyParam1將包含第一個參數等等。

+0

非常感謝JPBlanc,我對Powershell非常陌生,所以我很難理解我必須做什麼。看看我提供的腳本,我怎麼能把這個腳本完全融入我的腳本中,就像你在這裏解釋它一樣。 – Baykes75

0

您可以將它創建爲一個函數並加載它。

Function Folder-Deletion ($ExcelWorkbook,$targetfolder) { 

$ExcelObject = New-Object -ComObject Excel.Application 
$ExcelOpen = $ExcelObject.Workbooks.Open($ExcelWorkbook) 
$ExcelWorksheet = $ExcelOpen.Worksheets.Item(1) 
$a = Get-Date 

if(Test-Path $targetfolder) 
{ 
    Remove-Item $targetfolder -Force -Recurse -ErrorAction SilentlyContinue 
} 

New-Item -ItemType directory -Path $targetfolder 

$row = 1 
$col = 6 

$filename = $ExcelWorksheet.Cells.Item($row,$col).Value2 
$filename 
} 

然後運行對電子表格中的功能和文件夾,像這樣:

Folder-Deletion C:\Eric_Source\Test.xls C:\MKS_DEV 

或者你可以創建一個包含以下內容的PowerShell腳本文件(例如,FolderDeletion.ps1):

param($ExcelWorkbook,$targetfolder) 

$ExcelObject = New-Object -ComObject Excel.Application 
$ExcelOpen = $ExcelObject.Workbooks.Open($ExcelWorkbook) 
$ExcelWorksheet = $ExcelOpen.Worksheets.Item(1) 
$a = Get-Date 

if(Test-Path $targetfolder) 
{ 
    Remove-Item $targetfolder -Force -Recurse -ErrorAction SilentlyContinue 
} 

New-Item -ItemType directory -Path $targetfolder 

$row = 1 
$col = 6 

$filename = $ExcelWorksheet.Cells.Item($row,$col).Value2 
$filename 

然後針對電子表格和文件夾運行腳本,如下所示:

FolderDeletion.ps1 C:\Eric_Source\Test.xls C:\MKS_DEV 
相關問題