Java アプリケーション内から (Windows コマンド プロンプトを介して) PowerShell を呼び出して、さまざまなファイル属性を読み取ります。
例えば、
powershell (Get-Item 'C:\Users\erlpm\Desktop\Temp\s p a c e s.txt').creationTime
スペースが含まれている可能性があるため、ファイル パスを単一引用符で囲んでいます。ワイルドカード文字として解釈されるように見える角括弧を含むファイル パスに遭遇するまでは、問題なく動作しました。-literalPathパラメータを追加することで解決できました。
powershell (Get-Item -literalpath 'C:\Users\erlpm\Desktop\Temp\brackets[].txt').creationTime
これまでのところ、とても良いです...しかし、ファイルパスには一重引用符、ドル記号、アンパサンドなども含まれている可能性があり、これらすべての文字はPowerShellで特定の機能を持っているようで、-literalPathパラメーターが機能しないようです.
パスを二重引用符で囲むか、 ` 文字でエスケープしようとしましたが、それでも問題は解決しませんでした :-(
スペース、一重引用符、角括弧、アンパサンド、ドル記号などを含むファイル パスを PowerShell に渡す方法について何か提案はありますか?
ここの誰かが既に PowerShell 内から動作させる方法を教えてくれましたが、どういうわけか答えは削除されました (?)。
とにかく、というファイルを作成しました$ & ' [].txt
。これは PowerShell内で動作します(エスケープする必要があります&
):
Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
Directory: C:\Users\erlpm\Desktop\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012-08-23 14:22 0 $ & ' [].txt
しかし、Windows コマンド プロンプトから同じ PowerShell コマンドを実行すると、...
powershell Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
...次のエラーが表示されます。
アンパサンドは使用できません。& 演算子は将来の使用のために予約されています。アンパサンドを文字列として渡すには、「&」を使用します。
行:1 文字:55 \
- Get-Item -LiteralPath C:\Users\erlpm\Desktop\Temp`$ & <<<< ' [].txt \
- CategoryInfo : ParserError: (:) []、ParentContainsErrorRecordException \
- FullyQualifiedErrorId : AmpersandNotAllowed
パラメータを使用し-command
てPowerShellコマンドを挟むと{}
、まったく同じエラーメッセージが表示されます...
powershell -command {Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"}