0

拡張子が .xls の Excel ファイルのみを検索するスクリプトを既に作成しています。今、

  1. 同じスクリプトで、その特定の場所で見つかった.xlsまたは.xlsxのいずれかを探して使用したい......

  2. 古いスクリプトは、Excel シート/ファイルでのみ F 列のファイルを検索します.....これにより、検索に時間がかかるため、このパスのみを持つ F 列のファイルを検索したいと思います:root_project/ Excel シートの E 列の Fut_DB_Projects。

スクリプトのどこに挿入するかを正確に教えてください。私はPowershellに非常に慣れていないので、あなたの答えをいただければ幸いです。

# Creating an object for the Excel COM addin

$excelfile = $args[0]
$folder = $args[1]
echo $excelfile
echo $folder

if($excelfile -ne $Null -and $excelfile.Contains(".xls") -and (Test-Path $excelfile) -eq $True)
{
    if($folder -ne $Null -And $folder.Contains("\") -and (Test-Path $folder) -eq $True)
    {
        $ExcelObject = New-Object -ComObject Excel.Application

        # Opening the Workbook
        $ExcelWorkbook = $ExcelObject.Workbooks.Open($excelfile)

        # 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.Month+"_"+$a.Day+"_"+$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
        echo "Temp folder created"
        #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.
        $null = ""

        # Loop through each row in the excel file.
        do
        {
            $filename = $ExcelWorksheet.Cells.Item($row,$col).Value2

            #Checking if value read from Excel is Null
            #In powershell operator for NOT EQUAL TO is -ne not <>
            if($filename -ne $Null)
            {
                $filepath = $folder+$filename
                #Check if the filepath read from excel is a real filepath OR check if the file exists.
                if(Test-Path $filepath)
                {
                    #If the file exists, move it to the folder declared above
                    # Change the below command to Move-Item if you want to Move the file and not Copy...
                    Copy-Item $filepath $targetfolder
                }
                else
                {
                    #$Allfiles = Get-ChildItem -Recurse $folder
                    #You add the folders to the following list that you want the script to skip as it searches
                    #for the files through directory and its subdirectories
                    #eg. $xdir = @("Folder1","Folder2","Folder3")
                    $xdir = @("Tables","Views","Update","Synonyms","BES","ADTLTransit","Fut_DB_Jobs","Triggers","Scripts")
                    $remove = [string]::join("|",$xdir)

                    $Allfiles = Get-ChildItem -Recurse $folder | ? { $_.DirectoryName -notmatch $remove} 
                    Write-Host -Fore Yellow ("Looking through subfolders now")

                    foreach ($file in $Allfiles)
                    {
                        $testpath = $file.FullName
                        if($testpath.Contains($filename))
                        {
                            Write-Host -Fore Yellow ("Found the file in a subfolder at location:" + $testpath)
                            Move-Item $testpath $targetfolder
                        }
                    }
                }
            }
            #incrementing the row variable by 1 to move to the next available row in excel.
            $row = $row + 1
        }
        #while condition evaluates if value read from the excel is null. If null, then the loop breaks.
        while($filename -ne $Null)

        # Important: The object needs to quit and the variables release, otherwise
        # an Excel.exe will remain open.
        $ExcelObject.Quit()

        $ExcelObject = $null
        $ExcelWorkbook = $null
        $ExcelWorksheet = $null

        [GC]::Collect()
        do
        {
        }
        while((Test-Path -path $targetfolder) -ne $True)
        $targetfolderinfo = Get-ChildItem -Recurse $targetfolder | Measure-Object
        $targetfolderfilecount = $targetfolderinfo.count

        if($targetfolderfilecount -ne 0)
        {
            #Following command calls the function to zip all the files moved from source folder to target folder
            $directory = [IO.DirectoryInfo] $targetfolder

            If ($directory -eq $null)
            {
                Throw "Value cannot be null: directory"
            }

            Write-Host ("Creating zip file for folder (" + $directory.FullName + ")...")    
            [IO.DirectoryInfo] $parentDir = $directory.Parent    
            [string] $zipFileName

            If ($parentDir.FullName.EndsWith("\") -eq $true)
            {
                # e.g. $parentDir = "C:\"
                $zipFileName = $parentDir.FullName + $directory.Name + ".zip"
            }
            Else
            {
                $zipFileName = $parentDir.FullName + "\" + $directory.Name + ".zip"
            }

            If (Test-Path $zipFileName)
            {
                Remove-Item $zipFileName -Force -Recurse -ErrorAction SilentlyContinue
            }

            Set-Content $zipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))

            $shellApp = New-Object -ComObject Shell.Application
            $zipFile = $shellApp.NameSpace($zipFileName)

            If ($zipFile -eq $null)
            {
                Throw "Failed to get zip file object."
            }

            [int] $expectedCount = (Get-ChildItem $directory -Force -Recurse).Count
            $expectedCount += 1 # account for the top-level folder

            $zipFile.CopyHere($directory.FullName)

            Write-Host -Fore Green ("Successfully created zip file for folder (" `
                + $directory.FullName + ").")
        }
        else
        {
            Write-Host -Fore Red ("There are no files to be zipped")
        }

        [System.Threading.Thread]::Sleep(10000)
        Remove-Item $targetfolder -recurse
    }
    else
    {
        Write-Host -Fore Red ("Target folder path not specified correctly")
    }
}
else
{
    Write-Host -Fore Red ("Excel file path not specified") 
}
4

1 に答える 1

1

最初のifをこれに変更してみてください

if($excelfile -ne $Null -and $excelfile -like "*.xls*" -and (Test-Path $excelfile) -eq $True)
于 2012-10-11T15:14:53.303 に答える