masterhinz
Goto Top

Brauche Befehl die eine Datei auswählt, bei der der Name unterschiedlich sein kann

Hi kollegen,

es geht um folgendes:

ich möchte über den unten folgenden Befehl eine VHD Datei an Windows7 anfügen.

"select vdisk file="E:\WindowsImageBackup\%COMPUTERNAME%\Backup~1\e41ecb27-be3c-11de-9dcc-806e6f6e6963.vhd

attach vdisk"

Mein Problem ist dass diese bat dabei auf beliebig vielen PCs funktionieren soll.... das einzige was sich von rechner zu rechner ändert ist der Dateiname der .vhd datei. Wie muss also der Befehl lauten damit ich die Bat auf jedem rechner ausführen kann?

Ich hab wirklich schon viel gesucht und geguckt.... bin auch auf variablen und for tipps gestoßen. Leider bin ich eigentlich überhaupt kein Probgrammierer und kenne mich extrem wenig damit aus... vielleicht kann mir jemand den richtigen tipp geben! Danke im Vorraus!

Grüße aus Hannover

Content-ID: 129315

Url: https://administrator.de/contentid/129315

Ausgedruckt am: 08.11.2024 um 19:11 Uhr

bastla
bastla 13.11.2009 um 15:14:00 Uhr
Goto Top
Hallo masterhinz!

Wenn der Pfad immer gleich ist und es jeweils nur eine .vhd-Datei gibt, sollte
@echo off & setlocal
set "VHD="  
for %%i in ("E:\WindowsImageBackup\%COMPUTERNAME%\Backup~1\*.vhd") do set "VHD=%%i"  
if not defined VHD echo Keine Datei gefunden! & goto :eof
select vdisk file="%VHD%"  
attach vdisk
genügen ...

Grüße
bastla
masterhinz
masterhinz 13.11.2009 um 18:16:38 Uhr
Goto Top
vielen dank für die schnelle Hilfe!
0belixx
0belixx 05.04.2013 aktualisiert um 22:04:10 Uhr
Goto Top
Hi bastla,
Hast du auch eine Idee wenn 2 vhd Dateien da sind. Hatte schon die Idee die Größe zu vergleichen habe es aber noch nicht hinbekommen.

Gruß 0belixx
bastla
bastla 05.04.2013 um 23:06:34 Uhr
Goto Top
Hallo Obelixx!

Wie meinst Du das genau? Wenn zB "attach" für beide ausgeführt werden soll, etwa so:
@echo off & setlocal
for %%i in ("E:\WindowsImageBackup\%COMPUTERNAME%\Backup~1\*.vhd") do (  
    select vdisk file="%%i"  
    attach vdisk
)
Grüße
bastla
0belixx
0belixx 05.04.2013 um 23:14:45 Uhr
Goto Top
Hi
In der Regel ist es ja die größere der beiden vhds. Worum es mal 1 und mal 2 gibt weiß ich nicht. Ich würde gern die größere oder auch die neuere (ist die selbe vhd) einbinden.

Der Hintergrund ist das es verschieden PC s und auch mal leider 2 vhd sind die ich über eine Batch (dispart) mounten möchte. Wie gesagt bei einer vhd hab ich eine Lösung.

Gruß 0belixx
bastla
bastla 05.04.2013, aktualisiert am 06.04.2013 um 12:55:29 Uhr
Goto Top
Hallo Obelixx!

Versuch es so:
@echo off & setlocal
set "VHD="  
set "Max=0"  
for %%i in ("E:\WindowsImageBackup\%COMPUTERNAME%\Backup~1\*.vhd") do call :ProcessFile "%%i"  
if not defined VHD echo Keine Datei gefunden! & goto :eof
select vdisk file="%VHD%"  
attach vdisk
REM weitere Arbeitsschritte hier einfügen
goto :eof

:ProcessFile
for %%a in (%1) do set "Size=000000000000%%~za"  
if "%Size:~-13%" gtr "%Max%" (  
    set "Max=%Size:~-13%"  
    set "VHD=%~1"  
)
goto :eof
Da die Dateigrößen vermutlich über 2.147.483.647 (= 2 ^ 31 - 1 und die größte posizive Zahl, mit der CMD rechnen bzw numerisch vergleichen kann) Bytes hinausgehen werden, erfolgt der Größenvergleich mit Strings (siehe die Anführungszeichen in der Zeile 13) - dazu müssen die Größenangaben (durch das Hinzufügen der führenden Nullen und das Verwenden der daraus resultierenden letzten 13 Stellen) auf die gleiche Länge gebracht werden.

[Edit] ... und das alles nach dem Motto: "Warum einfach, wenn's auch kompliziert geht?" face-confused

Alternative:
@echo off & setlocal
set "Pfad="E:\WindowsImageBackup\%COMPUTERNAME%\Backup~1"  

set "VHD="  
for /f "delims=" %%i in ('dir /b/a-d/os "%Pfad%\*.vhd" 2^>nul') do set "VHD=%Pfad%\%%i"  
if not defined VHD echo Keine Datei gefunden! & goto :eof
select vdisk file="%VHD%"  
attach vdisk
[/Edit]

Grüße
bastla
0belixx
0belixx 05.04.2013 um 23:30:56 Uhr
Goto Top
Hi

Ja werd ich ausprobieren. Vielen Dank

Gruß 0belixx
0belixx
0belixx 07.04.2013, aktualisiert am 08.04.2013 um 00:56:28 Uhr
Goto Top
Hi bastla,

das klappt gut.

Vielen Dank 0belixx

@echo off & setlocal
FOR /f %%f IN (c:\temp\lw.txt) DO set LW=%%f
echo %LW%
set "VHD="\  
for /f "delims=" %%h in ('dir /b/a-d/os/s "%LW%\WindowsImageBackup\*.vhd" 2^>nul') do set "VHD=%%h"  
if not defined VHD echo Keine Datei gefunden! & goto :failure

Echo select vdisk file="%VHD%" >>C:\Temp\01.txt  
Echo attach vdisk >>C:\Temp\01.txt
Echo select partition 1 >>C:\Temp\01.txt
Echo assign Letter=x >>C:\Temp\01.txt



Echo select vdisk file="%VHD%" >>C:\Temp\02.txt  
Echo select partition 1 >>C:\Temp\02.txt
Echo remove Letter =x >>C:\Temp\02.txt
Echo detach vdisk >>C:\Temp\02.txt

diskpart /s C:\Temp\01.txt
TIMEOUT /T 10 /NOBREAK >Nul
if %errorlevel% == 0 (goto :success) else (goto :failure)

:success
Echo %date% %time:~0,2%-%time:~3,2%-%time:~6,2% - "Image Prüfung --> OK" >>%LW%\image_log.log  
::pause
goto :unmount
:failure
Echo %date% %time:~0,2%-%time:~3,2%-%time:~6,2% - "Fehler im Image" >>%LW%\image_log.log  
goto :ende


:unmount
diskpart /s C:\Temp\02.txt

del C:\Temp\01.txt
del C:\Temp\02.txt

Das ist jetz das Endresultat

Gruss 0belixx