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-Key: 129315

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: bastla
bastla Nov 13, 2009 at 14:14:00 (UTC)
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
Member: masterhinz
masterhinz Nov 13, 2009 at 17:16:38 (UTC)
Goto Top
vielen dank für die schnelle Hilfe!
Member: 0belixx
0belixx Apr 05, 2013 updated at 20:04:10 (UTC)
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
Member: bastla
bastla Apr 05, 2013 at 21:06:34 (UTC)
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
Member: 0belixx
0belixx Apr 05, 2013 at 21:14:45 (UTC)
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
Member: bastla
bastla Apr 05, 2013, updated at Apr 06, 2013 at 10:55:29 (UTC)
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
Member: 0belixx
0belixx Apr 05, 2013 at 21:30:56 (UTC)
Goto Top
Hi

Ja werd ich ausprobieren. Vielen Dank

Gruß 0belixx
Member: 0belixx
0belixx Apr 07, 2013 updated at 22:56:28 (UTC)
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