我想編寫在所有PowerShell平臺上運行的代碼。以下代碼通過Windows上的\
路徑分隔符和Linux上的/
路徑分隔符生成輸出。如何處理不同的路徑分隔符?
Get-ChildItem -File -Recurse | ForEach-Object { $_.FullName }
我要排除是一個obj
目錄下的任何地方的文件。 obj
目錄的數量和深度未知。做到這一點的一種方法是過濾掉那些使用類似下面的東西。但是,這在Linux上不起作用,因爲路徑分隔符不同。
Get-ChildItem -File -Recurse |
Where-Object { -not ($_.FullName -like '*\obj\*' |
ForEach-Object { $_.FullName }
使用正則表達式模式似乎工作,但我想知道是否有這樣做更明確的方式。我覺得這很尷尬。不僅如此,\\
字符作爲Linux文件名的一部分是有效的,這可能會給此代碼帶來故障漏洞。
Get-ChildItem -Recurse |
Where-Object { -not ($_.FullName -like "*[/\]obj[/\]*") } |
ForEach-Object { $_.FullName }
如果知道該文件夾的層深度,您可以過濾對'分離路徑-leaf' – BenH
@BenH的輸出 - 這將是一個辦法。使用'-split'和'-in'可能會起作用,但是對於如此簡單的事情來說,這看起來像很多代碼。我已經更新了這個問題,以指定'obj'目錄的數量和深度是未知的。 – lit
'Where-Object {$ _。FullName.split('/ \')-notcontains「obj」}'似乎確實有效。 – BenH