标题: [文件操作] dos下的批处理文件检测U盘文件{已解决} [打印本页]
作者: 夜宵 时间: 2022-5-13 10:08 标题: dos下的批处理文件检测U盘文件{已解决}
本帖最后由 夜宵 于 2022-5-13 17:19 编辑
怎么换成通过接口方式检测USB
@echo off&cd /d "%~dp0
:loop
set "upan="
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if exist %%a:\ (
fsutil fsinfo drivetype %%a: | find /i "固定式" >nul 2>nul&&(set "upan=%%a")||(set _%%a=%%a)
)
)
if defined upan (
for /f "tokens=2 delims==" %%a in ('set _') do (
echo;%%a Searching……
for /f "delims=" %%b in (' dir /a-d-h/b/s "%%a:\*.pst"') do (
set "file=%%~b"
set "filepath=%%~dpb"
setlocal enabledelayedexpansion
set "filepath=%upan%:\pst备份\!filepath::=!"
md "!filepath!" 2>nul
echo;"!file!" --^> "!filepath!"
copy "!file!" "!filepath!"
endlocal
)
)
goto end
)
>nul ping /n 3 0
goto loop
:end
pause
exit
作者: Batcher 时间: 2022-5-13 10:20
回复 1# 夜宵
假设你的U盘盘符是H,请执行命令:- fsutil fsinfo drivetype H:
复制代码
把结果发出来看看
如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 夜宵 时间: 2022-5-13 10:42
回复 2# Batcher
是固定式磁碟機,
运行bat直接跳过了c盘
显示的是
D Searching......
找不到檔案
請按任意鍵繼續 . . .
作者: 夜宵 时间: 2022-5-13 10:45
回复 2# Batcher
作者: Batcher 时间: 2022-5-13 10:47
回复 3# 夜宵
假设你的U盘盘符是H,请分别执行命令:- fsutil fsinfo drivetype C:
- fsutil fsinfo drivetype H:
复制代码
把结果发出来看看
作者: 夜宵 时间: 2022-5-13 10:52
回复 5# Batcher
作者: 夜宵 时间: 2022-5-13 11:24
回复 5# Batcher
大佬两个固定式的该怎么区分U盘
作者: Batcher 时间: 2022-5-13 11:45
回复 6# 夜宵
把脚本里面的代码删掉一部分,观察一下哪一步跟预期不一样,例如:- @echo off
- set "upan="
- for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
- if exist %%a:\ (
- fsutil fsinfo drivetype %%a:
- fsutil fsinfo drivetype %%a: | find /i "固定式" >nul 2>nul&&(set "upan=%%a")||(set _%%a=%%a)
- )
- )
- echo,%upan%
- if defined upan (
- set _
- )
- pause
复制代码
作者: 夜宵 时间: 2022-5-13 13:25
回复 7# 夜宵
可以修改成通过接口的方式检测U盘吗
作者: yakeyun 时间: 2022-5-13 14:00
本帖最后由 yakeyun 于 2022-5-13 14:06 编辑
回复 9# 夜宵
可以用下面代码获取到磁盘容量,然后除以1024/1024/1024求的GB值:- @echo off
- for /f "tokens=*" %%a in ('wmic diskdrive get Model^,MediaType^,PNPDeviceID^,Size ^|find "External hard disk media"') do (
- echo %%a
- )
- pause
复制代码
获取到的信息:
External hard disk media WINTOGO CHIPFANCIER SCSI Disk Device SCSI\DISK&VEN_WINTOGO&PROD_CHIPFANCIER\6&DD32B3&1&000000 126693987840
请按任意键继续. . .
然后用下面代码取得硬盘容量,对比容量后(如果对比容量有误差,就做减法,差值小于20就当作是同一个设备)即可获取到对应盘符:- @echo off
- for /f "tokens=*" %%a in ('echo list volume ^| diskpart ^|find/i "磁盘分区" ^| find /i "正常"') do echo %%a
- pause
复制代码
获取到的信息:
卷 1 D 工具 FAT32 磁盘分区 130 MB 正常
卷 2 C 系统 NTFS 磁盘分区 70 GB 正常 启动
卷 3 E 软件 NTFS 磁盘分区 153 GB 正常
卷 4 ESP_EFI FAT32 磁盘分区 99 MB 正常 系统
卷 5 F SLC NTFS 磁盘分区 117 GB 正常
请按任意键继续. . .
作者: yakeyun 时间: 2022-5-13 14:12
回复 8# Batcher
用10楼的方法可以获取到对应值,但是存在获取容量在末尾的情况,平时使用也会遇到WMIC get取值,无法按照关键词顺序排序结果顺序,请问有什么讲究吗。
比如下面两个代码排序不同,取值却一样:- @echo off
- for /f "tokens=*" %%a in ('wmic diskdrive get Size^,MediaType^,PNPDeviceID^,Model ^|find "External hard disk media"') do echo %%a
- echo ========================分割线==============================
- for /f "tokens=*" %%a in ('wmic diskdrive get Model^,MediaType^,PNPDeviceID^,Size ^|find "External hard disk media"') do echo %%a
- pause>nul
复制代码
取得结果:
External hard disk media WINTOGO CHIPFANCIER SCSI Disk Device SCSI\DISK&VEN_WINTOGO&PROD_CHIPFANCIER\6&DD32B3&1&000000 126693987840
========================分割线==============================
External hard disk media WINTOGO CHIPFANCIER SCSI Disk Device SCSI\DISK&VEN_WINTOGO&PROD_CHIPFANCIER\6&DD32B3&1&000000 126693987840
作者: Batcher 时间: 2022-5-13 14:55
回复 11# yakeyun
看不明白你想问的是什么,建议先试试
for /f "tokens=*" %%a in ('wmic diskdrive get Size^,MediaType^,PNPDeviceID^,Model /value
后面 find 或者 findstr
需要的话,给for命令加一个delims==
作者: yakeyun 时间: 2022-5-13 15:09
回复 12# Batcher
就是想把Size排序到第一个,这样就可以很方便的取值。
作者: Batcher 时间: 2022-5-13 15:18
回复 13# yakeyun
猜测是wmic命令的结果里面有不可见的特殊字符导致的,试试 wmic xxx /value 的方法吧
作者: yakeyun 时间: 2022-5-13 17:27
本帖最后由 yakeyun 于 2022-5-13 22:30 编辑
回复 1# 夜宵
看下是不是想要的结果:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,* delims=^=" %%a in ('wmic diskdrive where "MediaType='External hard disk media'" get Size /value ^|find /i "="') do (
- set Size=%%b
- for /f "tokens=1 delims=^." %%c in ('powershell -command " !Size! / 1024 / 1024 / 1024 "') do (
- set Size=%%c
- if defined Size (
- echo !Size!
- for /f "tokens=3" %%d in ('echo list volume ^| diskpart ^| find /i "!Size!"') do echo 获取到移动磁盘盘符是:%%d
- pause>nul
- )
- )
- )
- cls
- echo.
- echo 未发现可移动本地磁盘!
- echo.
- timeout -t 5 >nul
- exit
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |