script run how example create commands batch bat windows batch-file

windows - run - Consulte/seleccione una unidad basada solo en su etiqueta?(es decir, no la letra de la unidad)



windows batch file virus (4)

Este archivo de bat le dará la letra de la unidad de una etiqueta de unidad:

Option Explicit Dim num, args, objWMIService, objItem, colItems set args = WScript.Arguments num = args.Count if num <> 1 then WScript.Echo "Usage: CScript DriveFromLabel.vbs <label>" WScript.Quit 1 end if Set objWMIService = GetObject("winmgmts://./root/cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk") For Each objItem in colItems If strcomp(objItem.VolumeName, args.Item(0), 1) = 0 Then Wscript.Echo objItem.Name End If Next WScript.Quit 0

Ejecútelo como:

cscript /nologo DriveFromLabel.vbs label

Intento referirme a un disco cuya letra puede cambiar. Me gustaría referirme a él por su etiqueta (por ejemplo, MyLabel (v :) dentro de un archivo por lotes. Puede ser referido por V: /. Me gustaría referirme a él por MyLabel.

(Esto fue publicado en Experts Echange por un mes sin respuesta. Veamos qué tan rápido lo responde)



Aquí hay una secuencia de comandos por lotes simple getdrive.cmd para encontrar una letra de unidad de una etiqueta de volumen. Simplemente llame a "getdrive MyLabel" o acceda a "My Label".

@echo off setlocal :: Initial variables set TMPFILE=%~dp0getdrive.tmp set driveletters=abcdefghijklmnopqrstuvwxyz set MatchLabel_res= for /L %%g in (2,1,25) do call :MatchLabel %%g %* if not "%MatchLabel_res%"=="" echo %MatchLabel_res% goto :END :: Function to match a label with a drive letter. :: :: The first parameter is an integer from 1..26 that needs to be :: converted in a letter. It is easier looping on a number :: than looping on letters. :: :: The second parameter is the volume name passed-on to the script :MatchLabel :: result already found, just do nothing :: (necessary because there is no break for for loops) if not "%MatchLabel_res%"=="" goto :eof :: get the proper drive letter call set dl=%%driveletters:~%1,1%% :: strip-off the " in the volume name to be able to add them again further set volname=%2 set volname=%volname:"=% :: get the volume information on that disk vol %dl%: > "%TMPFILE%" 2>&1 :: Drive/Volume does not exist, just quit if not "%ERRORLEVEL%"=="0" goto :eof set found=0 for /F "usebackq tokens=3 delims=:" %%g in (`find /C /I "%volname%" "%TMPFILE%"`) do set found=%%g :: trick to stip any whitespaces set /A found=%found% + 0 if not "%found%"=="0" set MatchLabel_res=%dl%: goto :eof :END if exist "%TMPFILE%" del "%TMPFILE%" endlocal


Las respuestas anteriores parecen demasiado complicadas o no son especialmente adecuadas para un archivo por lotes.

Este sencillo trazador de líneas debe colocar la letra de unidad deseada en la variable myDrive. Obviamente cambie "Mi etiqueta" a su etiqueta actual.

for /f %%D in (''wmic volume get DriveLetter^, Label ^| find "My Label"'') do set myDrive=%%D

Si se ejecuta desde la línea de comandos (no en un archivo por lotes), entonces %% D debe cambiarse a% D en ambos lugares.

Una vez que se establece la variable, puede consultar el disco utilizando %myDrive% . Por ejemplo

dir %myDrive%/someFolder