I am trying to retrieve the modification date of a file in a locale-independent manner, using the following wmic
command:
wmic DataFile WHERE Name="D:\\Data\\sample.txt" GET LastModified
This works perfectly as long as the given file path does not contain any comma ,
.
The method below allows commas in the file path but fails if a closing parenthesis )
appears:
wmic DataFile WHERE (Name="D:\\Data\\sample.txt") GET LastModified
Up to now, I tried numerous different combinations, but without success:
WHERE Name=D:\\Data\\sample.txt
(this fails in general, I guess due to wrong data type)
WHERE Name="D:\\Data\\sample.txt"
(this fails with,
)
WHERE Name='D:\\Data\\sample.txt'
(this fails with,
)*
WHERE (Name="D:\\Data\\sample.txt")
(this fails with)
)
WHERE (Name='D:\\Data\\sample.txt')
(this fails with)
)*
WHERE 'Name="D:\\Data\\sample.txt"'
(this fails with,
)
WHERE "Name='D:\\Data\\sample.txt'"
(this fails with,
)
WHERE "Name=\"D:\\Data\\sample.txt\""
(this fails with,
)*
WHERE ^"Name=\"D:\\Data\\sample.txt\"^"
(this fails with,
)
escaping of,
and/or)
with\
does not work either;
*) This attempts that I do not like, because there are no ""
involved to enclose the file path, which could lead to problems with delimiters (SPACE, TAB, ;
, =
and the ,
) or special characters like ^
, &
, (
and )
.
So is there any way to allow both characters ,
and )
in the file path for the wmic
query not to fail? Is there any special character (sequence) to escape commas or closing parentheses? Or is there perhaps another method to work around the issue, with a different type of query or WHERE
clause?
There is a similar question: How do I escape comma in WMIC inside like string; but its is about escaping the ,
only and does not fully elaborate on escaping the )
also. That is why I am asking...
On the contrary, the method below allows a closing parenthesis
)
in the file path but fails if a comma,
appears: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:
Output (above code snipped pasted into an open
cmd
window):