在Powershell中的路径

时间:2015-09-05 14:14:22

标签: powershell path

我的正确代码就是这个

Add-Type @"
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace Wallpaper
{
 public enum Style : int
{
    Tile, Center, Stretch, NoChange
 }
 public class Setter {
  public const int SetDesktopWallpaper = 20;
  public const int UpdateIniFile = 0x01;
  public const int SendWinIniChange = 0x02;
  [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
  private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);
  public static void SetWallpaper ( string path, Wallpaper.Style style ) {
     SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
     RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
     switch( style )
     {
        case Style.Stretch :
           key.SetValue(@"WallpaperStyle", "2") ; 
           key.SetValue(@"TileWallpaper", "0") ;
           break;
        case Style.Center :
           key.SetValue(@"WallpaperStyle", "1") ; 
           key.SetValue(@"TileWallpaper", "0") ; 
           break;
        case Style.Tile :
           key.SetValue(@"WallpaperStyle", "1") ; 
           key.SetValue(@"TileWallpaper", "1") ;
           break;
        case Style.NoChange :
           break;
     }
     key.Close();
      }
    }
}
"@

[Wallpaper.Setter]::SetWallpaper( 'C:\Users\God\Desktop\Test\God.bmp' , 0 )

好的,脚本带有God.bmp,它总是在同一个中 目录(桌面上的文件夹测试),我试图用“。\ God.bmp”替换路径“C:\ Users \ God \ Desktop \ Test \ God.bmp”哪个应该可以工作但是它似乎工作我似乎工作我尝试了“./God.bmp”,但背景变成了黑色而不是上帝的画面。所以我怎么能让它正常工作,因为通常。\使它使用当前路径,据我所知

2 个答案:

答案 0 :(得分:0)

Windows可能无法处理注册表中壁纸的相对路径。如果您想在代码中使用相对路径,则必须在写入注册表之前将它们扩展为完整路径:

$FullPath = Join-Path -Path (Get-Location -PSProvider FileSystem).Path -ChildPath 'God.bmp'
[Wallpaper.Setter]::SetWallpaper($FullPath , 0)

答案 1 :(得分:0)

PowerShell将尝试查找.\God.bmp相对于调用者的,而不是文件系统中存在执行脚本的位置。

试试这个简单的例子:

# C:\scripts\relativepath.ps1
[System.IO.Path]::GetFullPath(".\god.bmp")

如果您打开提示并cd发送到C:\scripts,则按预期工作:

PS C:\scripts> .\relativepath.ps1
C:\scripts\god.bmp

但是如果你换到另一个目录:

PS C:\somewhere\else> C:\scripts\relativepath.ps1
C:\somewhere\else\god.bmp

如果您想要相对于执行脚本所在的的完整路径,请使用$PSScriptRoot自动变量:

$WallPaperPath = Join-Path -Path $PSScriptRoot -ChildPath "god.bmp"