2017-11-08 39 views
0

ソースフォルダーからコピー先フォルダーにファイルをコピーしようとしていて、そのファイルの名前を変更しようとしています。Powershellファイルのコピーと名前の変更

$Source = "C:\Source" 

$File01 = Get-ChildItem $Source | Where-Object {$_.name -like "File*"} 

$Destination = "\\Server01\Destination" 

Copy-Item "$Source\$File01" "$Destination\File01.test" -Force - 
Confirm:$False -ErrorAction silentlyContinue 
if(-not $?) {write-warning "Copy Failed"} 
else {write-host "Successfully moved $Source\$File01 to 
$Destination\File01.test"} 

問題はGet-ChildItemは、ファイルが見つからない場合は、エラーメッセージを投げるのではなく、あなたに空白を与えていないので、何のファイルがFile*という名前のない場合、私は先File01.testというフォルダで終わるということです$Sourceに存在します。

もし存在すれば、コピー操作はうまくいっています。しかし、一致するファイルが$Sourceに存在しない場合は、フォルダを作成する必要はなく、エラーメッセージがログファイルに記録され、ファイル操作が発生しないようにしたいだけです。

答えて

0

ファイルをコピーするコードがファイルの存在時にのみ実行されるように、if文を追加できます。で

$Source = "C:\Source" 
$Destination = "\\Server01\Destination" 
$File01 = Get-ChildItem $Source | Where-Object {$_.name -like "File*"} 
if ($File01) { 
    Copy-Item "$Source\$File01" "$Destination\File01.test" -Force -Confirm:$False -ErrorAction silentlyContinue 
    if(-not $?) {write-warning "Copy Failed"} 
    else {write-host "Successfully moved $Source\$File01 to 
    $Destination\File01.test"} 
} else { 
    Write-Output "File did not exist in $source" | Out-File log.log 
} 

ブロック「場合」、それは$ FILE01はそれで何かを持っているかどうかをチェックし、もしそうなら、それは以降のコードを実行します。 "else"ブロックで、前のコードが実行されなかった場合、出力はログファイル "log.log"に送信されます。

0

ファイル名が何であるかは関係ありませんが、宛先に既に存在するファイルは考慮されません。 File01.txtが既に存在し、File01.txtを再度コピーしようとすると、問題が発生します。

param 
(
    $Source = "C:\Source", 
    $Destination = "\\Server01\Destination", 
    $Filter = "File*" 
) 

$Files = ` 
    Get-ChildItem -Path $Source ` 
    | Where-Object -Property Name -Like -Value $Filter 

for ($i=0;$i -lt $Files.Count;$i++) 
{ 
    $NewName = '{0}{1:D2}{3}' -f $Files[$i].BaseName,$i,$Files[$i].Extension 
    $NewPath = Join-Path -Path $Destination -ChildPath $NewName 
    try 
    { 
     Write-Host "Moving file from '$($Files[$i].FullName)' to '$NewPath'" 
     Copy-Item -Path $Files[$i] -Destination 
    } 
    catch 
    { 
     throw "Error moving file from '$($Files[$i].FullName)' to '$NewPath'" 
    } 
} 
関連する問題