私はコンピュータのログオンの背景を変更するスクリプトを作成しています。私は必要なすべてを行う必要がありますが、スクリプトをより効率的にしようとしています。新しいものを選択した後、OrderNames
という名前の関数を呼び出して、すべての名前をランダムに変更し、それらは背景1、2、3、などです。結構な動作しますが、私は単に$BGOld
と$BGNew
の名前を切り替えできるようにしたいと思い2つのファイルの名前を切り替える
Function OrderNames #Renames everything to a format better than random numbers
{
$FileNames = GCI $BGPath -exclude $BGOld
$FileNames | ForEach-Object -process { Rename-Item $_ -NewName "$Get-Random).jpg" }
$OrderNames = GCI $BGPath -exclude $BGOld
$OrderNames | ForEach-Object -begin { $count = 1 } -process
{ Rename-Item $_ -NewName "background$count.jpg"; $count++ }
}
$Path = "C:\Windows\System32\oobe\info\backgrounds"
$BGOld = GCI $BGPath "backgrounddefault.jpg" #Store current background name
$BGFiles = GCI $BGPath -exclude $BGOld #Get all other images
$BGNew = $BGFiles[(get-random -max ($BGFiles.count)] #Select new image
Rename-Item $BGOld.FullName "$(Get-Random)-$($_.Name).jpg"
Rename-Item $BGNew.FullName "backgrounddefault.jpg"
OrderNames
:ここでは私が働いているものの抜粋です。大学ではCで一時変数を作成し、BGNewをそこに保存し、BGNewをBGOldに等しくしてからBGOldを等価にすることができました。しかし、BGOldの値を使って一時変数を作成すると、動作しません。実際には、変数はリネーム機能では変更されておらず、他の結果と同じに設定されています。
項目が存在しないため名前を変更できません。
ファイン、私はSelect basename
で変数にファイルの名前だけを設定しようとしたが、私はタイプsystem.io.fileinfoのオブジェクトへのインデックスすることはできません
に関するエラーが発生します。
また、私はRename-Item
といくつか他の人と私は今覚えていないことを試みたが、$BGOld.FullName = $BGNew.FullName
を試してみました。
アイテム名をコピーしようとしましたが、これも機能しませんでした。私はそれが私が見落としてきた単純なものではないと思っています。
TL; DR
は、私は、ファイルの名前を変更するとき、私は一時変数の名前をコピーすることができるように、「古い」に戻っオーバー、一時変数にファイルの名前をコピーすることは可能ですすべての名前を変更しないようにするには?あるいは、ファイル名を切り替えることはできますか?
最初のファイルの名前を一時的な名前に変更し、2番目のファイルの名前を最初のファイルの名前に変更してから、一時ファイルの名前を2番目のファイルの名前に変更します。 –
ディスク上のファイルの名前をランダムに変更してから、新しいファイルの名前を古いものに変更する*は、あなたが記述したC変数スワップのメモリと同じファイルシステムです –
@Bill_Stewart私はそれをやってみましたが、私はそれをさせません - 私はファイル名が存在しない、またはそれ以上のエラーについては、パスを取得しようとすると、パスはnullです。 – user6111573