我收到一個錯誤,我無法在空值表達式上調用方法。但是,我不知道爲什麼參數導致空值。我需要第二個眼睛來看這個,給我一些指導。PowerShell:我需要理解爲什麼參數被解釋爲NULL
$docpath = "c:\users\x\desktop\do"
$htmPath = "c:\users\x\desktop\ht"
$txtPath = "c:\users\x\desktop\tx"
$srcPath = "c:\users\x\desktop\ht"
#
$srcfilesTXT = Get-ChildItem $txtPath -filter "*.htm*"
$srcfilesDOC = Get-ChildItem $docPath -filter "*.htm*"
$srcfilesHTM = Get-ChildItem $htmPath -filter "*.htm*"
#
function rename-documents ($docs) {
Move-Item -txtPath $_.FullName $_.Name.Replace("\.htm", ".txt")
Move-Item -docpath $_.FullName $_.Name.Replace("\.htm", ".doc")
}
ForEach ($doc in $srcpath) {
Write-Host "Renaming :" $doc.FullName
rename-documents -docs $doc.FullName
$doc = $null
}
和錯誤....
You cannot call a method on a null-valued expression.
At C:\users\x\desktop\foo002.ps1:62 char:51
+ Move-Item -txtPath $_.FullName $_.FullName.Replace <<<< ("\.htm", ".txt")
+ CategoryInfo : InvalidOperation: (Replace:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At C:\users\x46332\desktop\foo002.ps1:63 char:51
+ Move-Item -docpath $_.FullName $_.FullName.Replace <<<< ("\.htm", ".doc")
+ CategoryInfo : InvalidOperation: (Replace:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
第一:看來我("\.htm", ".txt")
是什麼顯示爲空。我已經嘗試過,沒有\
- (".htm", ".txt")
- 也收到了相同的結果。
第二:在句法上,我將我的行解釋爲move-item <path> <source-file-passed-to-function> <replacement=name-for-file> (parameters-for-replacement)
。這是對這個代碼在做什麼的適當理解?
第三:我需要在那裏有一個-literalpath
參數嗎? MS TechNet和get-help對使用-literalpath
參數的信息很少;我無法找到與我的特定情況相關的內容。
幫助我瞭解我錯過了什麼。謝謝!
第一:'$ srcpath'包含「c:\ users \ x \ desktop \ ht」作爲字符串而不是文件列表。第二:對於'move-item',這個 - >'-txtpath'是要移動的文件的名稱,而不是路徑。描述你的問題到底是什麼。 –
第三:在'move-item'中需要'-literalpath'作爲您的先例問題http://stackoverflow.com/a/14259748/520612 –
目標:我試圖將一批文件從* .foo重命名爲*。酒吧。重命名必須是腳本中的函數。該腳本已經設置了需要傳遞給該函數的路徑變量。 – dwwilson66