2014-10-01 52 views
0

我是PowerShell的新手,瞭解cmdlet的工作原理。我有三條路徑,我想確保它們都有尾部斜線。下面的代碼應該檢查每一個並附加一個\如果不存在,但它不會最終改變它們本身。ForEach-Object循環中字符串的破壞性處理?

# append trailing slash if not present 
$engineXCopyPath, $engineXBackupPath, $enlistmentBuildTargetPath | ForEach-Object { 
    if(!$_.EndsWith("\")) { 
     $_ += "\" 
    } 
} 

感謝您的幫助!

回答

1

試試這樣說:

# append trailing slash if not present 
$engineXCopyPath, $engineXBackupPath, $enlistmentBuildTargetPath = 
$engineXCopyPath, $engineXBackupPath, $enlistmentBuildTargetPath | ForEach-Object { 
    if(!$_.EndsWith("\")) { 
     $_ + "\" 
    } 
    else { 
     $_ # keep the original value if appending isn't needed 
    }  
} 
+0

這工作!我仍然不明白'$ _'的作用,並且不知道它的名字,因此很難搜索到它。你可以給我一個鏈接進一步閱讀? – Benjin 2014-10-01 21:14:45

+1

$ _是管道中當前對象的值,而不是實際對象。此解決方案使用間接(=)使用退出值計算新值,並將其重新分配回原始對象。我有點不知所措,想出一個明確解釋這一點的鏈接。也許別人可以。 – mjolinor 2014-10-01 21:27:55