2017-03-20 5 views
1

단추가있는 PS 양식 실행. 버튼을 눌러 일부 물건을 호출 한 다음 모듈을 호출합니다. 모듈을 사용하여 D : \ FolderName01 \ MyFolderName에서 D : \ FolderName02로 폴더를 이동해야합니다.Powershell 이동 항목 액세스가 거부되었습니다.

관리자로 로그인했습니다. 서버 2012-R2

코드는 이 아니며은 버튼 누름에서 호출되고 자동화 된 스크립트가 실행될 때 실행됩니다.

DOES 코드를 편집 할 때 아무 문제없이 실행 한 후 강조 표시하고 "Run Selection"을 사용하십시오.

문자 그대로 전체 모듈입니다. 그 밖의 일은 끝나지 않았습니다.

코드 :

function MoveTheFolder($VariableName){ 

    if (-not (Test-Path "D:\FolderName02")) { 
     md "D:\FolderName02"} 

    cd -Path d:\ 
    Move-Item -Path "D:\FolderName01\$VariableName" -Destination "D:\FolderName02" -Force 

} 

FolderName02가 문제없이 생성됩니다. $ VariableName은 모듈에 전달되며 중단 점 분석 및 실제 오류 메시지를 기반으로 정확합니다. 원래 경로는 DVD 드라이브입니다 (F의 .iso 파일). 주어진

오류 내가 수동으로 Windows 탐색기를 사용하여 폴더를 이동할 수 있습니다, 그래서 그들은 열려있는 응용 프로그램과 함께 묶여되지 않는 것 같습니다

move-item: Access to the path '[D:\FolderName01\$VariableName]' is denied. 

입니다.

+0

은 UAC를 사용하는 경우 스크립트가 "관리자 권한으로 실행"입니까? 콘솔 또는 메시지 상자에 경로를 제대로 처리 할 수 ​​있도록 변수를 사용하여 경로를 작성할 수 있습니까? – ssaviers

+0

호기심 때문에,'move-item' 대신에'COPY'를 사용하면 디렉토리가 목적지에 복사됩니까? – Nate

+0

@TessellatingHeckler 그는 DVD에서 움직이지 않습니다. DVD는 F : \가 아닌 D : \, 맞습니까? – Nate

답변

1

PowerShell 2.0 복사하기 전에 디렉터리를 만들어야합니다.

PowerShell 3.0에서는 항목 이동 또는 항목 복사가 만들어지기 때문에 만들 필요가 없습니다.

지금까지 파일을 가져 오는 중입니다. 스위치 -Recurse과 함께 Get-ChildItem을 사용할 수 있습니다. 서브 폴더에 포함 된 첫 번째 디렉토리의 모든 파일을 가져올 것이기 때문입니다. 파일과 폴더를 가져 오면 -Force 옵션을 사용하여 Move-Item으로 연결합니다. Move-Item은 파일을 새 디렉토리로 이동합니다. 이것이 원하는 경우 Copy-Item을 사용해야합니다. 또한 디버깅을 위해 -Verbose 스위치를 추가했습니다. 어떤 파일이 작동하지 않는지 알려주십시오.

Function MoveTheFolder($VariableName){ 
if (-not (Test-Path "D:\FolderName02")) {New-Item "D:\FolderName02\$VariableName" -Type Directory} 
     cd D:\ #You do not need this, but its ok. 
Get-ChildItem -Path "D:\FolderName01\$VariableName\*" -Recurse | Move-Item -Destination "D:\FolderName02\$VariableName" -Force -Verbose 
Get-ChildItem -Path "D:\FolderName01\$VariableName\*" -Recurse | Copy-Item -Destination "D:\FolderName02\$VariableName" -Force -Verbose 
     } 

이 기능이 작동하는지 알려주세요.

+0

D : \ Folder02가 존재하지 않는다면 D : \ Folder02가되지 않으므로 거기에 체크인을해야합니다. 나머지 종류의 작품들, 그러나 아직 정확하게는 아닙니다. $ VariableName에있는 파일은 각각의 하위 폴더에서 가져와 D : \ Folder02 \ $ VariableName의 루트에 배치됩니다. 전체 $ VariableName 폴더가 Folder01에서 Folder02로 이동해야합니다. 그리고 Folder01에는 옮겨서는 안되는 다른 많은 폴더가 있습니다. – JoeBlow

+0

그건 내 잘못이었고 당시 PowerShell V2.0에서 작동하지 않는다는 것을 몰랐습니다. 내 이해 이제 폴더 Folder1 많은 하위 폴더가 있습니다. $ VariableName과 같은 디렉토리 만 있으면됩니다. 그런 다음 FolderName02에서 다른 foldername $ VariableName에 파일을 저장하려고합니다. 코드를 업데이트했습니다. –

1

그래서 Zach의 해결책은 완전히 정확하지는 않지만 실제 답변을 이끌어 냈습니다.

Function MoveTheFolder($VariableName){ 
    if (-not (Test-Path "D:\FolderName02")) { 
     New-Item "D:\FolderName02\$VariableName" -Type Directory 
    } 
    Get-ChildItem -Path "D:\FolderName01\$VariableName\" | Move-Item -Destination "D:\FolderName02\$VariableName" -Force 
    Remove-Item -Path "D:\Folder01\$VariableName" -Force 
} 

는 내가 원하는 모든 폴더 이름, 그 안에 파일을 열거 할 필요가 없습니다 때문에 와일드 카드 기표 제거하고 -recurse 당함 : 여기 작업 코드입니다.