Resolve-Path cmdlet究竟做了什么?

时间:2016-08-15 03:05:56

标签: powershell path

我最近在Windows 10系统上开始使用Powershell。我已经创建了一个配置文件,我想放入一个链接到文档部分文件夹的变量。但是,我不想对路径进行硬编码,因为我知道如果我的配置文件名称在硬盘驱动器传输中发生了变化,我就需要进入并重新编写它,就像上次我做的那样把它送去修理。所以我的第一个想法就是投入这样的东西:

$Var = $(~\Documents\Folder)

但是,这回复了一个错误。然后我学会了Resolve-Path Cmdlet,它一目了然地成为我需要的东西。但是,当我这样做时:

$Var = $(Resolve-Path ~\Documents\Folder)

......我明白了:

>$Var

Path
----
C:\Users\Username\Documents\Folder

>

这似乎是一个问题。但是,当我尝试cd $Var时,它成功运作,这让我非常困惑。我认为结果中无关的Path标题会导致错误。

Resolve-Path 做了什么,为什么在传递到cd时仍能正确解释?另外,有没有办法让Resolve-Path 包含无关信息并仅返回扩展路径?

2 个答案:

答案 0 :(得分:2)

您看到标头Path的原因是因为Resolve-Path正在返回类型为System.Management.Automation.PathInfo的对象,并且当未将其捕获到变量中时,它将作为字符串输出到控制台的可读格式IE:

 ObjProperty1      ObjProperty2      ObjProperty3  ...
 ---------         ---------         ---------     ...
 Value1            Value2            Value3        ...

此对象与cd一起使用,因为PowerShell足够聪明,可以在$var运行之前解析对象(cd)。 PowerShell会将path属性的值返回到cd,这意味着cd会看到字符串"C:\Users\Username\Documents\Folder"而不是对象标头。

如果您只想返回没有标题的路径,请使用Select cmdlet的-ExpandProperty参数:

$var = Resolve-Path '~\Documents\Folder' | select -ExpandProperty Path 

如果您想了解有关Resolve-Path的更多信息,MSDN是一个很好的起点(link)。

答案 1 :(得分:1)

Resolve-Path作业的简单示例,

我们假设您不知道计算机中的办公室版本,并希望获得正确的路径,num = 3 try: #set an exception in case of a file Error while num >=0: '''read in values and place them in a file''' value = int(input("Enter values: ")) my_file = open('my_data.txt', 'w+') my_file.write(str(value)) numbers = my_file.readlines() num -=1 my_file.close() except IOError: print('FILE FAILURE') '''iterate to find the sum of the values in a file''' total = 0 for ln in numbers: total += int(ln) '''Calculate the average''' avg = total/len(numbers) print("The average is %d"%(avg))#FIXME: does not calculate average 可以提供帮助......

Resolve-Path