2016-11-02 1 views
0

複数のCSVファイルを1つのExcelワークブックにまとめてネットワーク共有上で実行するスクリプトBoe Proxを修正しようとしています。PowerShell - Microsoft.PowerShell.Core FileSystem ::

私はローカルで実行すると、スクリプトは素晴らしい実行し、複数の.csvファイルを1つのExcelブックに結合します。

Clear-Host 
$OutputFile = "ePortalMonthlyReport.xlsx" 
$ChildDir = "C:\MonthlyReport\*.csv" 
cd "C:\MonthlyReport\" 

echo "Combining .csv files into Excel workbook" 
. C:\PowerShell\ConvertCSVtoExcel.ps1 
Get-ChildItem $ChildDir | ConvertCSVtoExcel -output $OutputFile 
echo " " 

しかし、私は次のように変更して、ネットワーク共有から実行するように変更します。

Clear-Host 
# Variables 
$OutputFile = "ePortalMonthlyReport.xlsx" 
$NetworkDir = "\\sqltest2\dev_ePortal\Monthly_Report" 
$ChildDir = "\\sqltest2\dev_ePortal\Monthly_Report\*.csv" 

cd "\\sqltest2\dev_ePortal\Monthly_Report" 

echo "Combining .csv files into Excel workbook" 
. $NetworkDir\ConvertCSVtoExcel.ps1 
Get-ChildItem $ChildDir | ConvertCSVtoExcel -output $OutputFile 
echo " " 

私はそれが二回ネットワークパスを使用したように見えるエラーを取得していますし、私はわかりません理由:\ sqltest2 \ dev_ePortal \ Monthly_Report \ 001_S変換するExcelワークブック

に.csvファイルを組み合わせる

tatsByCounty.csv 命名ワークシート001_StatsByCounty --done

一時ワークブック

の開口部のcsv ExcelでMicrosoft.PowerShell.Core \ FileSystemの:: \ sqltest2 \ dev_ePortal \ Monthly_Report \\ sqltest2 \ dev_ePortal \ Monthly_Report \ 001_StatsByCounty.csv)

申し訳ありませんが、Microsoft.PowerShell.Core \ FileSystem :: \ sqltest2 \ dev_ePortal \ Monthly_Report \\ sqltest2 \ dev_ePortal \ Monthly_Report \ 001_StatsByCounty.csvが見つかりませんでした。移動、名前変更、削除された可能性はありますか?

誰でもこの問題を解決するための考えはありますか?

おかげで、

答えて

1

スクリプトでは、次の正規表現を使用しているので:

例えば、ドライブ文字で始まるパスと一致
[regex]$regex = "^\w\:\\" 

c:\data\file.csvは一致し、data\file.csvは一致しません。 (明らかに)Excelが完全なパスを必要とするため、ファイルパスが一致しない場合、それはそれの前に現在のディレクトリを追加しますので、それは、これを使用しています。

#Open the CSV file in Excel, must be converted into complete path if no already done 
    If ($regex.ismatch($input)) { 
     $tempcsv = $excel.Workbooks.Open($input) 
     } 
    ElseIf ($regex.ismatch("$($input.fullname)")) { 
     $tempcsv = $excel.Workbooks.Open("$($input.fullname)") 
     }  
    Else {  
     $tempcsv = $excel.Workbooks.Open("$($pwd)\$input")  
     } 

あなたのファイルパスが\\server\share\data\file.csvになり、それはdoesnのドライブレターが表示されないので、最後のオプションに当たって、現在の作業ディレクトリの自動変数$pwdをファイルパスの先頭に詰めます。同様に、それを変更せずに使用するようOK \\で始まるパスと一致します

[regex]$regex = "^\w\:\\|^\\\\" 

:あなたは彼のスクリプトを編集して、正規表現を変更した場合

あなたは逃げるかもしれません。

2番目のオプションのように、最後のオプション(〜行111)を...Open("$($input.fullname)")と編集することもできます。

+0

ありがとうございます - 私にこのショットをしましょう。 – MISNole

0

多くの問題は、スクリプトが$ PSScriptRootではなく$ pwdを呼び出すほぼすべてのインスタンスで発生します。すべてのインスタンスをすばやく検索して置き換えます。

のような$ PWDルックス:私は自分のために固定された第2の部分は@TessellatingHecklerを指摘するものである

\\foo\bar 

PS Microsoft.PowerShell.Core\FileSystem::\\foo\bar 

$ PSScriptRootのように見えます。私はより長いアプローチを取った。

これは最も効率的な方法ではありませんが、私にとっては明らかです。

[regex]$regex = "^\w\:\\" 
[regex]$regex2 = "^\\\\" 

$test = 0 

If ($regex.ismatch($input) -and $test -eq 0) { 
$tempcsv = $excel.Workbooks.Open($input) 
$test = 1 } 

If ($regex.ismatch("$($input.fullname)") -and $test -eq 0) { 
$tempcsv = $excel.Workbooks.Open("$($input.fullname)") 
$test = 1} 

If ($regex2.ismatch($input) -and $test -eq 0) { 
$tempcsv = $excel.Workbooks.Open($input) 
$test = 1 } 

If ($regex2.ismatch("$($input.fullname)") -and $test -eq 0) { 
$tempcsv = $excel.Workbooks.Open("$($input.fullname)") 
$test = 1} 

If ($test -eq 0) {  
$tempcsv = $excel.Workbooks.Open("$($PSScriptRoot)\$input") 
$test = 0 } 
関連する問題