2016-05-12 9 views
1

私は、次のwmicのコマンドを使用して、ロケールに依存しない方法でファイルの更新日時を取得しようとしています:WMICのWHERE句にカンマと閉じ括弧の両方をエスケープする方法はありますか?

wmic DataFile WHERE Name="D:\\Data\\sample.txt" GET LastModified 

これがある限り、特定のファイルパスは任意のカンマ,が含まれていないとして完璧に動作します。

方法は、以下のファイルパスにカンマを使用できますが、閉じ括弧)が表示された場合は失敗します。今まで、私は数多くのさまざまな組み合わせを試してみました

wmic DataFile WHERE (Name="D:\\Data\\sample.txt") GET LastModified 

、成功せず:

WHERE Name=D:\\Data\\sample.txt (これは一般的に失敗します、間違ったデータタイプのため)
WHERE Name="D:\\Data\\sample.txt"(これは,で失敗します)


WHERE "Name='D:\\Data\\sample.txt'"(これは,で失敗)WHERE Name='D:\\Data\\sample.txt'(これは,で失敗)*
WHERE (Name="D:\\Data\\sample.txt")(これは)で失敗)
WHERE (Name='D:\\Data\\sample.txt')は(これは)で失敗)*
WHERE 'Name="D:\\Data\\sample.txt"'(これは,で失敗します) WHERE "Name=\"D:\\Data\\sample.txt\""(これは,で失敗します)*
WHERE ^"Name=\"D:\\Data\\sample.txt\"^"(これは,で失敗)\,および/または)
エスケープが動作しませんか。

*)これは、ファイルパスを囲んで関与なし""がないので、私は好きではないことをしようと区切り文字での問題につながる可能性がある(SPACETAB;=,)または^,&,(および)のような特殊文字。

だから、失敗しないwmicクエリのファイルパスの文字,)の両方をできるようにする方法はありますか?コンマや閉じ括弧をエスケープする特殊文字(シーケンス)はありますか?または別のタイプのクエリまたはWHERE句を使用して、この問題を回避する別の方法がありますか?


同様の質問があります。How do I escape comma in WMIC inside like string;しかし、それは,だけをエスケープすることであり、)もエスケープすることについて完全には詳しく述べていません。それが私が求めている理由です...

答えて

2

以下の方法は、ファイルパスにカンマを使用できますが、決算 カッコ)が表示された場合は失敗します。逆に

==> wmic DataFile WHERE (Name = "D:\\bat\\Unusual Names\\2c,comma.txt") get Name, LastModified 
LastModified    Name 
20160513080305.362206+120 d:\bat\unusual names\2c,comma.txt 

を、以下の方法は、ファイルパスに閉じカッコ)することができますカンマ,が表示された場合は失敗します。

==> wmic DataFile WHERE "Name = 'D:\\bat\\Unusual Names\\28(parens_29).txt'" get Name, LastModified 
LastModified    Name 
20160513104341.746838+120 d:\bat\unusual names\28(parens_29).txt 

それは、両方のカンマのための共通のアプローチが存在しないように見えます。 閉じ括弧)をファイルパスに含めます。 2c,comma_28(parens_29).txt

powershell -Command Get-WmiObject -Query """Select * from CIM_DataFile where name = 'D:\\bat\\Unusual Names\\2c,comma_28(parens_29).txt'""" ^| select name, LastModified ^| ft -AutoSize 
:: 
:: a bit more readable 
:: 
powershell -Command Get-WmiObject -Query """Select * from CIM_DataFile where "^ 
    "name = 'D:\\bat\\Unusual Names\\2c,comma_28(parens_29).txt'"""^
    ^| select name, LastModified ^| ft -AutoSize 
:: 
:: even more readable 
:: 
set "_filePath=D:\bat\Unusual Names\2c,comma_28(parens_29).txt" 
powershell -Command Get-WmiObject -Query^
    """Select * from CIM_DataFile where name = '%_filePath:\=\\%'"""^
    ^| select name, LastModified ^| ft -AutoSize 

出力(コードの上に開いているcmdウィンドウに貼り付ける切り取ら):

==> powershell -Command Get-WmiObject -Query """Select * from CIM_DataFile where 
name = 'D:\\bat\\Unusual Names\\2c,comma_28(parens_29).txt'""" ^| select name, 
LastModified ^| ft -AutoSize 

name           LastModified 
----           ------------ 
d:\bat\unusual names\2c,comma_28(parens_29).txt 20160513103717.765243+120 

==> :: 
==> :: a bit more readable 
==> :: 
==> powershell -Command Get-WmiObject -Query """Select * from CIM_DataFile where "^ 
More? "name = 'D:\\bat\\Unusual Names\\2c,comma_28(parens_29).txt'"""^
More? ^| select name, LastModified ^| ft -AutoSize 

name           LastModified 
----           ------------ 
d:\bat\unusual names\2c,comma_28(parens_29).txt 20160513103717.765243+120 

==> :: 
==> :: even more readable 
==> :: 
==> set "_filePath=D:\bat\Unusual Names\2c,comma_28(parens_29).txt" 

==> powershell -Command Get-WmiObject -Query^
More? """Select * from CIM_DataFile where name = '%_filePath:\=\\%'"""^
More? ^| select name, LastModified ^| ft -AutoSize 

name           LastModified 
----           ------------ 
d:\bat\unusual names\2c,comma_28(parens_29).txt 20160513103717.765243+120 

==> 

しかし、ここでの回避策使用してPowerShellのです

関連する問題