2016-03-04 27 views
2

我使用脚本扫描整个用户的驱动器C中的特定文件,然后将结果记录在网络上的txt文件中。它像一个魅力。在批处理文件上使用驱动器号

这是脚本:

@echo off 

pushd C:\ 
dir /s /a-d "setup.txt" /s "setup2.txt" >nul && (goto printresult) || (goto notfound) 

:printresult 
dir /s /a-d setup.txt /s setup2.txt >>"\\servidor\pastadelogs\FOUND_%computername%.txt 
popd 
exit 

:notfound 
echo "Este PC não possui os arquivos" >>"\\servidor\pastadelogs\NOTFOUND_%computername%.txt 
popd 
exit 

现在我需要改进它,使它扫描USB驱动器内为好。我已经有一个代码,这将使我的USB字母:

@echo off 
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (

    if %%l equ 2 (
    echo %%i is a drive letter 

     ) 
     ) 

我的2个问题是:

  • 我可以使用它们在一起吗?
  • 如果有多个USB插头会怎么样?它将如何工作?我可以为每个驱动器号结果设置1个变量吗?

问候

回答

1

被处理,因为该任务也被扫描慢USB媒体则是明智的建立一个档案,在第一轮结果,并且只要type数据到目标文件,如果有结果,而不是再次扫描。

这是未经测试,将检查可移动和本地磁盘(不包括A:和B :)

编辑

它使用选择什么驱使等不包括的方法(在FINDSTR命令):如驱动器号和驱动器类型号,并且ID删除标题。

@echo off 
set "file=%temp%\drivescan.tmp" 
for /f "tokens=1,2" %%a in ('wmic logicaldisk get deviceid^,drivetype^|findstr /i /v "a: b: 0 1 4 5 6 ID"') do (
    echo Processing drive %%a 
    (dir /b /s /a-d "%%a\setup.txt" "%%a\setup2.txt")>"%file%" 2>nul 
    for %%d in ("%file%") do if %%~zd NEQ 0 (
     type "%file%" >> "\\servidor\pastadelogs\FOUND_%computername%.txt" 
     ) else (
     echo "[%%a] Este PC não possui os arquivos">>"\\servidor\pastadelogs\NOTFOUND_%computername%.txt" 
    ) 
    del "%file%" 2>nul 
) 

下面是我用Google搜索驱动器类型的列表:

wmic logicaldisk where drivetype=2 get deviceid, volumename, description 

Types 

0 => Unknown 
1 => No Root Directory 
2 => Removable Disk 
3 => Local Disk 
4 => Network Drive 
5 => Compact Disc 
6 => RAM Disk 
+0

这比我的工作好得多,你是对的,它比扫描设备好两倍。当驱动器A上没有光盘时,仍然出现错误。我正在运行vmware机器上的测试。你认为有可能排除A和B驱动器吗?另外,C驱动器的结果出现了两次,不是这是一个大问题。问候。 –

+0

此外,如果它可以避免显示任何错误弹出窗口,它会很好。谢谢! –

+0

@LuizGustavoBatista代码现在应该排除a:和b:并且确保在运行测试之前删除目标文件。驱动器c:应该只按照我的理解扫描一次。 – foxidrive

0
@echo off 
for /f %%i in ('wmic logicaldisk where "drivetype=2" get caption^|find ":"') do (
    pushd %%i 
    dir /s /a-d "setup.txt" /s "setup2.txt" >nul && (
     dir /b /s /a-d setup.txt /s setup2.txt >>"\\servidor\pastadelogs\FOUND_%computername%.txt" 
    ) || (
     echo "[%%i] Este PC não possui os arquivos" >>"\\servidor\pastadelogs\NOTFOUND_%computername%.txt" 
    ) 
    popd 
) 

这会为每一个USB驱动器

+0

谢谢你,但我得到了一个错误说有驱动器A中没有磁盘是否有可能包括C盘,每USB和排除所有其他? (CD,DVD等)。由于这将以无声方式完成,因此我无法在屏幕上弹出任何错误消息。我感谢您的帮助。 –

+0

计算机可能拥有的另一个分区,除了网络驱动器...非常感谢! –

+0

再次在这里运行测试我发现它发现了C:内的文件,但它没有扫描USB。结果出现两次,如下所示: C:\ Users \ gi-tecso \ Dropbox \ 2-Gustavo \ LUGUTA \ SOFTWARES \ SCRIPTS \ setup.txt C:\ Users \ gi-tecso \ Dropbox \ 2 -Gustavo \ LUGUTA \ SOFTWARES \ SCRIPTS \ setup.txt –

相关问题