2016-04-26 10 views
-1

Iは、New-Itemコマンドで追加したが、それは私の構文を好きではないです。助けてください:PowerShellの新項目コマンド

$Dir = get-childitem -path "\\ahs-bind01\ftptest01\CRAR" -recurse 
$Source = $Dir | where {$_.extension -eq ".txt"} 

#Declare the file path and sheet name 

$file = "C:\Users\us6205\Desktop\DatabaseNameConfigs\Test\CareMoveFileParentDestPaths.xlsx" 

$sheetName = "sheet1" 


#Create an instance of Excel.Application and Open Excel file 

$objExcel = New-Object -ComObject Excel.Application 

$workbook = $objExcel.Workbooks.Open($file) 

$sheet = $workbook.Worksheets.Item($sheetName) 

$objExcel.Visible=$false 


#Count max row 

$rowMax = ($sheet.UsedRange.Rows).count 

#Declare the starting positions 

$rowLOC,$colLOC = 1,1 
$rowUNC,$colUNC = 1,2 


#loop to get values and store it 

for ($i=1; $i -le $rowMax-1; $i++) 

{ 

$LOC = $sheet.Cells.Item($rowLOC+$i,$colLOC).text 
$UNC = $sheet.Cells.Item($rowUNC+$i,$colUNC).text 

$Path = Get-ChildItem $UNC -recurse | 
Where-Object { ($_.PSIsContainer -eq $true) -and ($_.Name -match "$Source") } 
$Dest = $Path | New-Item -path $Dest -itemtype directory | Move-Item -Path $Source -Destination $Dest -Force 
} 

#close excel file 

$objExcel.quit() 

エクセルドック:

Col A  Col B 
Test C:\Users\US6205\Desktop\Test\Unprocessed 
Test1 C:\Users\US6205\Desktop\Test1\Unprocessed 

Error

+0

誤差はかなり明確です。 $ dest変数は、その変数を使用しようとする時点で値を持たないようです。あなたのパイプラインを短くして、それがその時点で保持しているものと、それがあなたが考えるべきものを保持していない理由を理解してください。 – EBGreen

+0

私はまた、$パスがゼロ、1、または複数のファイルシステムオブジェクトとなり、新項目の-Pathパラメータは、1つのまたは複数の文字列を期待していることを指摘します。ですから少なくとも、タイプの不一致が予想されます。値を取得し、それを(; $ I -le $ rowMax-1; $ i = 1〜I ++は$)ため 格納する – EBGreen

+0

#loop { $ LOC = $ sheet.Cells.Item($ rowLOC + $ Iを$ colLOC)の.text $ UNC = $ sheet.Cells.Item($ rowUNC + $ I、$ colUNC) の.text $パス=は、Get-ChildItemコマンドレット$ UNC -recurse | どこ-オブジェクト{($ _ PSIsContainer -eq $ trueを返します。) - および($ _名-match "$ソース"。)} 新項目-Path $ UNC型ディレクトリ 移動-項目-Path $ソース - 目的地$パス - フォース } #クローズをExcelファイル $ objExcel.quit() – Peter

答えて

2

パイプラインの使用ラインの下で修正されていません。

$Dest = $Path | New-Item -path $Dest -itemtype directory | Move-Item -Path $Source -Destination $Dest -Force 

$ Destに$ Pathを割り当てません。 $ Path変数をパイプラインの右側の次のコマンドに渡します。 New-Itemコマンドで使用しようとすると、$ Destは空です。代わりに、以下のように別々の行に使用します。

$Dest = $Path 
New-Item -path $Dest -itemtype directory 
Move-Item -Path $Source -Destination $Dest -Force 

私もパスがスクリプトに存在することを確認するためにTest-Pathコマンドレットを使用することをお勧めします。

関連する問題