2016-05-12 4 views
1

Ich versuche, das Änderungsdatum einer Datei in einem locale unabhängig abgerufen werden, den folgenden wmic Befehl:Wie können Sie sowohl das Komma als auch die schließende Klammer in der WHERE-Klausel von WMIC umgehen?

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

Die perfekt, solange der angegebene Dateipfad , jedes Komma enthält nicht funktioniert.

Das Verfahren unter Kommas in dem Dateipfad ermöglicht versagt aber, wenn eine geschlossene Klammer ) erscheint:

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

Bis jetzt habe ich viele verschiedene Kombinationen ausprobiert, aber ohne Erfolg:

WHERE Name=D:\\Data\\sample.txt (Dies schlägt im Allgemeinen fehl, denke ich aufgrund des falschen Datentyps)
WHERE Name="D:\\Data\\sample.txt" (dies schlägt mit , fehl)
WHERE Name='D:\\Data\\sample.txt' (dies nicht gelingt mit ,) *
WHERE (Name="D:\\Data\\sample.txt") (dies nicht gelingt mit ))
WHERE (Name='D:\\Data\\sample.txt') (dies nicht gelingt mit )) *
WHERE 'Name="D:\\Data\\sample.txt"' (dies nicht gelingt mit ,)
WHERE "Name='D:\\Data\\sample.txt'" (dies scheitert mit ,)
WHERE "Name=\"D:\\Data\\sample.txt\"" (dies schlägt fehl mit ,) *
WHERE ^"Name=\"D:\\Data\\sample.txt\"^" (versagen diese mit ,)
von , Flucht und/oder ) mit \ funktioniert auch nicht;

*) Diese versucht, dass Ich mag es nicht, denn es gibt keine "" beteiligt sind den Dateipfad zu umschließen, was zu Problemen mit Trennzeichen (SPACE, TAB, ;, = führen könnte und die ,) oder Sonderzeichen wie ^, &, ( und ).

So ist es eine Möglichkeit, beiden Charaktere , und ) im Dateipfad für die wmic Abfrage zu ermöglichen, nicht zu scheitern? Gibt es ein Sonderzeichen (Sequenz), um Kommas oder schließenden Klammern zu entkommen? Oder gibt es vielleicht eine andere Methode, um das Problem zu umgehen, mit einer anderen Art von Abfrage oder WHERE Klausel?


Es gibt eine ähnliche Frage: How do I escape comma in WMIC inside like string; aber es geht darum, nur die , zu entkommen und nicht vollständig auf die ) auch zu entkommen. Deshalb frage ich ...

Antwort

2

Das Verfahren unter Kommas in dem Dateipfad ermöglicht versagt aber, wenn eine Schließung Klammer ) erscheint:

==> 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 

Im Gegensatz dazu ermöglicht das Verfahren unter einer schließenden Klammer ) im Dateipfad aber nicht, wenn ein Komma , erscheint:

==> 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 

Es scheint keinen gemeinsamen Ansatz für beide Komma ,und schließende Klammer )zusammen im Dateipfad z.B. 2c,comma_28(parens_29).txt.

Allerdings ist hier eine Abhilfe mit Powershell:

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 

Ausgang (oben Code snipped in ein offenes cmd Fenster eingefügt):

==> 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 

==> 
Verwandte Themen