Discussion forum for all Windows batch related topics.
Moderator: DosItHelp
-
barnabe0057
- Posts: 21
- Joined: 04 Aug 2017 14:20
- Location: France
#1
Post
by barnabe0057 » 09 Nov 2020 15:55
Hi guys,
These 2 lines allow me to detect if a removable disk (a usb key named "USB1") is connected:
Code: Select all
>"%TEMP%\usb_devices.txt" wmic logicaldisk where drivetype=2 get DeviceID, VolumeName
find /i "USB1" "%TEMP%\usb_devices.txt"
The FIND command finds the string "USB1" but if I replace FIND with FINDSTR, oddly the FINDSTR command does not find anything.
What could be the reason of this difference in result ?
-
aGerman
- Expert
- Posts: 4678
- Joined: 22 Jan 2010 18:01
- Location: Germany
#2
Post
by aGerman » 09 Nov 2020 16:08
If wmic output is redirected to a file it will be UTF-16-encoded. While FIND can handle it, FINDSTR obviously can't.
What's your goal? I'm pretty sure we can work around this issue without the temporary file.
Steffen
-
barnabe0057
- Posts: 21
- Joined: 04 Aug 2017 14:20
- Location: France
#3
Post
by barnabe0057 » 09 Nov 2020 16:14
I asked the question to satisfy my curiosity, I can continue to use FIND + the temporary file, no problem for me.
Thank you very much for your responsiveness.
-
aGerman
- Expert
- Posts: 4678
- Joined: 22 Jan 2010 18:01
- Location: Germany
#4
Post
by aGerman » 09 Nov 2020 16:41
You could process the output in a FOR /F loop without the temporary file. And WQL supports AND for the filter.
Code: Select all
@echo off &setlocal
set "DeviceID="
for /f %%i in ('2^>nul wmic logicaldisk WHERE "drivetype=2 AND VolumeName='USB1'" get DeviceID /value') do for /f %%j in ("%%i") do set "%%j"
if defined DeviceID (echo %DeviceID%) else echo not found
pause
The second FOR loop is necessary to remove the extra carriage return character at the end of the line (WMIC bug).
Steffen
-
barnabe0057
- Posts: 21
- Joined: 04 Aug 2017 14:20
- Location: France
#5
Post
by barnabe0057 » 09 Nov 2020 17:03
a bit complicated but interesting, I just understood the set "%%j"