0

私はPowerShellを初めて使用するので、ここで助けが必要です。以下は、フォルダー内のExcelファイルを見つけるために作成したスクリプトです。Excelシートのファイルは、同じマシン上の別のフォルダーの内容と比較されます。場所は次のとおりです。"C:\ MKS_DEV \"一致したファイルは圧縮され、スクリプトに示されているように別の場所に配置されます。これらのスクリプトは、異なるマシン上の他のユーザーによって使用されるため、両方のフォルダーの場所が異なるマシン上で異なる可能性があります。

スクリプトを実行しなければならないときに常に場所を指定する必要がなく、これを実装する方法がわからないように、両方のフォルダーの場所に引数を記述したり、パラメーターを使用したりしたいと思います。

スクリプトは完全に機能しますが、引数/パラメーターをスクリプトに組み込む必要があります。どんな助けでも大歓迎です。

ありがとう。

コードは次のとおりです。

# 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 = ""
4

2 に答える 2

1

スクリプトをパラメータ化する方法は複数あります。

1つ目は、$ args[n][自動変数] 1です。スクリプトが呼び出されたMyScript.PS1場合は、次のコマンドで呼び出すことができます。

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

次に、スクリプト内$args[0]で最初の引数を使用します。

もう1つの方法は、スクリプトの先頭で予約語Paramを使用することです。

Param ($MyParam1, $MyParam2)

スクリプトを呼び出すと$MyParam1、最初のパラメータなどが含まれます。

于 2012-09-24T05:06:42.153 に答える
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
于 2014-01-10T08:23:23.813 に答える