How to escape both comma and closing parenthesis in WHERE clause of WMIC?

后端 未结 3 1380
一向
一向 2020-12-04 00:53

I am trying to retrieve the modification date of a file in a locale-independent manner, using the following wmic command:

wmic DataFile WHERE Na         


        
3条回答
  •  粉色の甜心
    2020-12-04 01:26

    The method below allows commas in the file path but fails if a closing parenthesis ) appears:

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

    Edit. The following example added in response to @Rublacava comments:

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

    On the contrary, the method below allows a closing parenthesis ) in the file path but fails if a comma , appears:

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

    It does not look to exist a common approach for both comma , and closing parenthesis ) together in the file path e.g. 2c,comma_28(parens_29).txt.

    However, here's a workaround using 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
    

    Output (above code snipped pasted into an open cmd window):

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

提交回复
热议问题