[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 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

本帖最后由 yakeyun 于 2022-5-13 22:30 编辑

回复 1# 夜宵

看下是不是想要的结果:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,* delims=^=" %%a in ('wmic diskdrive where "MediaType='External hard disk media'" get Size /value ^|find /i "="') do (
  3. set Size=%%b
  4. for /f "tokens=1 delims=^." %%c in ('powershell -command " !Size! / 1024 / 1024 / 1024 "') do (
  5. set Size=%%c
  6. if defined Size (
  7. echo !Size!
  8. for /f "tokens=3" %%d in ('echo list volume ^| diskpart ^| find /i "!Size!"') do echo 获取到移动磁盘盘符是:%%d
  9. pause>nul
  10. )
  11. )
  12. )
  13. cls
  14. echo.
  15. echo 未发现可移动本地磁盘!
  16. echo.
  17. timeout -t 5 >nul
  18. exit
复制代码

TOP

回复 13# yakeyun


猜测是wmic命令的结果里面有不可见的特殊字符导致的,试试 wmic xxx /value 的方法吧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# Batcher


就是想把Size排序到第一个,这样就可以很方便的取值。

TOP

回复 11# yakeyun


看不明白你想问的是什么,建议先试试
for /f "tokens=*" %%a in ('wmic diskdrive get Size^,MediaType^,PNPDeviceID^,Model /value
后面 find 或者 findstr
需要的话,给for命令加一个delims==
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# Batcher

用10楼的方法可以获取到对应值,但是存在获取容量在末尾的情况,平时使用也会遇到WMIC get取值,无法按照关键词顺序排序结果顺序,请问有什么讲究吗。
比如下面两个代码排序不同,取值却一样:
  1. @echo off
  2. for /f "tokens=*" %%a in ('wmic diskdrive get Size^,MediaType^,PNPDeviceID^,Model ^|find "External hard disk media"') do echo %%a
  3. echo ========================分割线==============================
  4. for /f "tokens=*" %%a in ('wmic diskdrive get Model^,MediaType^,PNPDeviceID^,Size ^|find "External hard disk media"') do echo %%a
  5. 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

TOP

本帖最后由 yakeyun 于 2022-5-13 14:06 编辑

回复 9# 夜宵

可以用下面代码获取到磁盘容量,然后除以1024/1024/1024求的GB值:
  1. @echo off
  2. for /f "tokens=*" %%a in ('wmic diskdrive get Model^,MediaType^,PNPDeviceID^,Size ^|find "External hard disk media"') do (
  3. echo %%a
  4. )
  5. pause
复制代码
获取到的信息:
External hard disk media  WINTOGO CHIPFANCIER SCSI Disk Device  SCSI\DISK&VEN_WINTOGO&PROD_CHIPFANCIER\6&DD32B3&1&000000         126693987840
请按任意键继续. . .

然后用下面代码取得硬盘容量,对比容量后(如果对比容量有误差,就做减法,差值小于20就当作是同一个设备)即可获取到对应盘符:
  1. @echo off
  2. for /f "tokens=*" %%a in ('echo list volume ^| diskpart ^|find/i "磁盘分区" ^| find /i "正常"') do echo %%a
  3. 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  正常
请按任意键继续. . .

TOP

回复 7# 夜宵


   
可以修改成通过接口的方式检测U盘吗

TOP

回复 6# 夜宵


把脚本里面的代码删掉一部分,观察一下哪一步跟预期不一样,例如:
  1. @echo off
  2. set "upan="
  3. 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 (
  4.     if exist %%a:\ (
  5.         fsutil fsinfo drivetype %%a:
  6.         fsutil fsinfo drivetype %%a: | find /i "固定式" >nul 2>nul&&(set "upan=%%a")||(set _%%a=%%a)
  7.     )
  8. )
  9. echo,%upan%
  10. if defined upan (
  11.     set _
  12. )
  13. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher


  大佬两个固定式的该怎么区分U盘

TOP

回复 5# Batcher


   

TOP

回复 3# 夜宵


假设你的U盘盘符是H,请分别执行命令:
  1. fsutil fsinfo drivetype C:
  2. fsutil fsinfo drivetype H:
复制代码
把结果发出来看看
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher

TOP

回复 2# Batcher
是固定式磁碟機,
运行bat直接跳过了c盘
显示的是
D Searching......
找不到檔案
請按任意鍵繼續 . . .

TOP

回复 1# 夜宵


假设你的U盘盘符是H,请执行命令:
  1. fsutil fsinfo drivetype H:
复制代码
把结果发出来看看
如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表