質問: Get-Date -Format "yyyy/MM/dd HH:mm:ss" Get-ChildItem -Recurse | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object { Set-ItemProperty $_.FullName -Name LastWriteTime -Value ($filename)} ``` 上記の記述だと、1234.txtというファイルはタイムスタンプが現在時刻に 変更されますが、1234[1].txtというファイルは変更されません。 1234[1].txtというファイルもタイムスタンプを変更したい場合、 -LiteralPathを使用するというところまでは分かるのですが、どのように 記述すれば良いか分かりません。 該当のフォルダには様々な様式、ファイル名があり、一括でそれらの ファイルのタイムスタンプを変更できるような記述を教えて下さると有り難いです。 ご回答のほど、よろしくお願い致します。
回答: こんばんは。 問題となっているのは ``` Set-ItemProperty $_.FullName -Name LastWriteTime -Value ($filename) ``` の部分であり、これは ``` Set-ItemProperty -Path $_.FullName -Name LastWriteTime -Value ($filename) ``` と等価です。 このため質問文に書かれている様に`-LiteralPath`を ``` Set-ItemProperty -LiteralPath $_.FullName -Name LastWriteTime -Value ($filename) ``` の様に、全体としては、 ``` $filename = Get-Date -Format "yyyy/MM/dd HH:mm:ss" Get-ChildItem -Recurse | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object { Set-ItemProperty -LiteralPath $_.FullName -Name LastWriteTime -Value ($filename)} ``` とすれば期待した動作になるかと思います。 【余談】 リテラルで記述されているワイルドカード文字(`[`、`]`など)はZuishinさんのおっしゃる様にバッククォートでエスケープ可能です。