2017-11-08 2 views
0

원본 폴더에서 대상 폴더로 파일을 복사하고 프로세스의 파일 이름을 바꾸려고합니다. 어떤 파일이 File* 이름없는 경우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 이후 파일을 찾을 수없는 경우 오류 메시지를 던질 것이 아니라 단지 당신에게 빈을 제공하지 않는다는 것입니다, 나는 목적지에 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'" 
    } 
} 
관련 문제