2014-07-18 1 views
0

여기 내 상황이 있습니다. 260 + 문자가 포함 된 경로에있는 XML이 있습니다. 이 경로에있는 폴더 중 하나는 항상 무작위이며, 다른 폴더는 버전을 기반으로하므로 다를 수 있습니다.260 자 이상의 경로에 XML을 저장하려면 어떻게해야합니까?

XML을로드하고 변경 한 다음 다시 저장하려고합니다. 지금까지는 C : \ Windows \ Temp에 복사하여 변경 한 다음 수동 테스트에서 작동했던 다시 복사하려고했습니다.

내 주된 문제는 260자가 넘는 파일 경로가 포함되어있어 Copy-Item이 제대로 작동하지 않아서 변수를 사용해야하므로 Robocopy를 작동시키는 방법을 찾지 못했습니다. 임의의 폴더 때문에 경로.

XML 수정 작업, Temp로 복사가 작동하는데 문제는 260+ 문자 경로로 다시 복사하는 것입니다.

저는 Powershell에서 FYI로 매우 새롭습니다. 여기에 지금까지 함께 온 것입니다 :

여기
$folderLocation = Get-ChildItem -Path C:\Windows\System32\config\systemprofile\AppData\Local\ProgramA\ -Filter userConfig.xml -Recurse | 
    Sort-Object LastWriteTime | 
    Select-Object -last 1 | 
    Select-Object Directory | 
    Format-Table -hide 

foreach ($f in $folderLocation){ 
    Copy-Item userConfig.xml C:\Windows\Temp 
} 


$myXML = New-Object System.Xml.XmlDocument 
$myXML.Load("C:\Windows\Temp\userConfig.xml") 

$isActive = $myXML.SelectSingleNode("//setting[@name = 'Active']") 
$isActive.value = "True" 

$myXML.Save("C:\Windows\Temp\userConfig.xml") 

$convertFolder = [System.String]$folderLocation 

Copy-Item ("C:\Windows\Temp\userConfig.xml") $convertFolder 

내가 시도한있는 Robocopy 코드, 나는 그것이 hackjob 알고하지만 난 온라인보고 몇 가지 모방하려고 :

function copy-stuff 
{ 
param([string]$source = "C:\Windows\Temp", 
[string]$destination = $convertFolder, 
[string]$options = “/R:0″,”/W:0″,”/COPY:DAT”) 
[string]$file = "userConfig.xml" 

robocopy $source $destination $file $options 

} 

I을 robocopy와 몇 가지 다른 일을 시도했지만 이것은 내가 구한 것입니다. 나는 Powershell에서 기능을 만들고 사용하는 것에 대해 연구하지 않았다. 그래서 이것은 원숭이가 원숭이가 시도하는 것을 본다. 당신이 당신의 기능에 아무 것도 전달되지 않고, 디폴트 값에 의존하는 것 같습니다

: 코드의있는 Robocopy 부분을 해결

+0

robocopy.exe를 사용하여 파일을 복사 해보십시오. –

+0

임시 파일 경로가 긴 폴더를 드라이브 문자로 대체하고 스크립트에서 해당 드라이브를 사용하십시오. http://ss64.com/nt/subst.html –

+0

Robocopy가 작동합니다. 그것은 내가 길다란 길에서 일할 수있는 유일한 방법 중 하나입니다. 시도한 Robocopy 코드를 게시하여 해결하도록 도와주세요. –

답변

0

. 이것을 시도하십시오 :

function Copy-Stuff { 
    param (
     [string]$source, 
     [string]$destination, 
     [string]$file 
    ) 

    robocopy $source $destination $file /R:0 /W:0 /COPY:DAT 
} 

$convertFolder = "blahblah" 
Copy-Stuff -Source "C:\Windows\Temp" -Destination $convertFolder -File "userConfig.xml" 

옵션이 변경되지 않으면 변수를 변경하지 마십시오.

+0

현재 질식하는 유일한 곳은 $ convertFolder 변수를 -Destination 매개 변수로 받아들이는 곳입니다. $ convertFolder는 $ folderLocation을 string으로 변환 한 것입니다. $ folderLocation의 경로에있는 2 개의 무작위 폴더 때문에 변수가 아닌 다른 함수로 전달하는 방법을 알 수 없었습니다. – HikerJim

+0

개체 배열 (단 하나의 개체 일지라도)을 문자열로 변환하려고합니다. 각 경로에 액세스하려면 배열을 반복해야합니다. –

+0

기본적으로,'$ convertFolder = [System.String] $ folderLocation'은'foreach' 루프에 있어야합니다. –