我最近在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
不包含无关信息并仅返回扩展路径?
答案 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