0

これが私の状況です。260 文字以上を含むパスにある XML があります。このパスのフォルダーの 1 つは常にランダムで、別のフォルダーはバージョンに基づいているため、異なる場合もあります。

XML をロードし、変更を加えて保存しようとしています。これまでのところ、その場でそれを行うことができなかったので、それを C:\Windows\Temp にコピーし、そこで変更を加えてから、手動テストで機能した場所にコピーしようとしています。

私の主な問題は、ファイルパスに260以上の文字が含まれているため、Copy-Itemが正しく機能せず、パスに変数を使用する必要があるため、Robocopyを機能させる方法を理解できなかったことです.ランダムなフォルダ。

XML の変更が機能し、Temp へのコピーが機能します。私が抱えている問題は、それを 260 文字以上のパスにコピーすることです。

参考までに、私はPowershellを初めて使用します。これが私がこれまでに思いついたものです:

$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 コードです。ハックジョブであることはわかっていますが、オンラインで見たものをいくつか模倣しようとしました。

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

}

私は robocopy でいくつかの異なることを試しましたが、これは私がまだ保存していたものです。私はPowershellで関数を作成して使用することについて勉強していないので、これは猿の試みでした。

4

1 に答える 1

0

コードの Robocopy 部分に対処する:

関数に何も渡していないように見えますが、デフォルト値に依存しています。これを試して:

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"

オプションが変更されない場合は、それらを変数にする必要はありません。

于 2014-07-18T15:31:31.257 に答える