Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 04.02.2011 um 16:37:20 Uhr
Datei umbennen in Batchdatei aus Dateiinhalt
Ich benne rum, du bennst herum.. *sing* ... bennen wir nicht alle ein wenig?
Set /a rgc+=1
#724
GELÖST

Datei umbenennen in Batchdatei aus Dateiinhalt

Frage Entwicklung Batch & Shell

Mitglied: eccos01

eccos01 (Level 1) - Jetzt verbinden

04.02.2011, aktualisiert 07.02.2011, 4460 Aufrufe, 28 Kommentare

hallo,

ich habe eine Zip-Datei für ein Update in der sich der Originalname der Zip-Datei befindet. Mit Hilfe dieses Originalnamens soll die Zip-Datei nach einer ersten Verarbeitung verschoben und umbenannt werden.

Erklärung:
Aus bestimmten programmtechnischen Gründen darf die Zip-Datei nur update.zip heißen.
Sobald die Zip-Datei verarbeitet wurde, würde ich sie gerne an anderer Stelle ablegen... allerdings mit ihrer Versionsbezeichnung (z.B. Update-1.2.3.4.zip)

Der Zielname liegt in einer Datei z.B. version.txt innerhalb des Archives.

Beispiel:

- update.bat liegt in d:\test\install
- update.bat wird d:\test\install\extract entpackt ud verarbeitet (der Teil ist bereits vorhanden!!!)
- Anschließend soll die Datei ins Verzeichnis d:\test\backup_updates verschoben werden
- Der Dateiname soll aber nicht mehr update.zip sondern update-1.2.3.4.zip sein.
- Zielverzeichnis ist statisch und braucht nicht ausgelesen zu werden!
- Die Datei version.txt innerhalb des Archives (update.zip) enthalt folgenden text "update-1.2.3.4.zip".

Wir müßten die passenden Batchzeilen aussehen?
28 Antworten
Mitglied: bastla
04.02.2011 um 13:16 Uhr
Hallo eccos01!

Falls zumindest XP als OS vorausgesetzt werden darf, ginge mit ein wenig temporärem VBS (zB dem VBA hier "nachempfunden") das Ganze mit Bordmitteln etwa so (kaum getestet):
01.
@echo off & setlocal 
02.
set "ZIP=d:\test\install\update.zip" 
03.
set "Datei=version.txt" 
04.
set "Ziel=%TEMP%" 
05.
set "Bak=d:\test\backup_updates" 
06.
 
07.
set U=%temp%\Unzip.vbs 
08.
> %U% echo Set App=CreateObject("Shell.Application"):Set a=WScript.Arguments:ZIP=a(0):Target=a(1):File=a(2) 
09.
>>%U% echo For Each FN In App.Namespace(ZIP).Items:If LCase(FN)=LCase(File) Then App.Namespace(Target).CopyHere App.Namespace(ZIP).Items.Item(File):End If:Next 
10.
cscript //nologo %U% "%ZIP%" "%Ziel%" "%Datei%" 
11.
if not exist "%Ziel%\%Datei%" echo Datei "%Datei%" nicht gefunden! & goto :eof 
12.
set /p VersName=<"%Ziel%\%Datei%" 
13.
del %U% 
14.
del "%Ziel%\%Datei%" 
15.
 
16.
md "%Bak%" 2>nul 
17.
move "%ZIP%" "%Bak%\%VersName%"
Als weitere Voraussetzung muss der Inhalt der ersten Zeile von "version.txt" einen gültigen Dateinamen ergeben.

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 13:43 Uhr
Aloha bastla,

Zeile 11 verwirrt mich: Was nutzt das echo, wenn danach das Fenster zugeht und man das echo nicht mehr lesen kann?

greetz André

edit:
egal, was hier vorher stand ... funktioniert *pfeif* schneller getippt als Windows reagieren kann
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 14:02 Uhr
Geht es auch mit reinem Batch-Scripting.... also ohne VBS?

Weil es muß auf Win 2000, Win XP, Win 7, Win2k3 Server, Win2k8 Server und Win 2k8 R2 Server laufen...

und mit den ganzen Sicherheitseinschränkungen dort, wäre mir eine Variante nur mit Batch lieber.
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 14:19 Uhr
Aloha,

laufen würde es überall - sind bei euch Skripte à la .vbs deaktiviert?

Ich bezweifle, dass es mit batch only machbar ist (bzw. man ruft per batch wiederum ein weiteres Programm auf, dann sicherlich)

greetz André
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 14:39 Uhr
Denke schon, dass das machbar ist... habe so was ähnliches hier gefunden...

01. @echo off & setlocal
02. set "Basis=D:\Songs"
03.
04. for /r "%Basis%" %%i in (*.txt) do (
05. ren "%%~dpi*.jpg" "%%~ni.*" 2>nul
06. ren "%%~dpi*.mp3" "%%~ni.*" 2>nul
07. )
08. pause


Aber ich kenn mich mit den for-Kommando nicht wirklich aus...
ich muß also einfach nur denDateinamen aus der datei auslesen und in eine Umgebungsvariable einfügen... das muss doch ohne VB-Skript gehen, oder?
Bitte warten ..
Mitglied: bastla
04.02.2011 um 14:51 Uhr
Hallo eccos01!

Das Umbenennen / Verschieben lässt sich natürlich per native Batch erledigen (passiert ja auch ab Zeile 12 meines Ansatzes) - das VBScript wird nur für das Entpacken benötigt; Letzteres wiederum kann aber alternativ nur durch ein zusätzliches Programm erfolgen ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 14:51 Uhr
Aloha eccos ...

dann erkläre mir auch bitte, wie du die Datei extrahierst ohne Extraprogramm oder .vbs?!

greetz André

edit: arr bastla du kurz-vor-mir-poster ;)
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 14:53 Uhr
Übrigens... um das entpacken muß sich das Skript nicht kümmern... das läuft bereits.
Update.zip wird entpackt, die Verarbeitung läuft und version.txt wäre direkt im Zugriff!

Daß heißt, daß es nur darum geht, den neuen Namen aus version.txt zu ermitteln und update.zip umzubenennen.
Bitte warten ..
Mitglied: bastla
04.02.2011 um 14:54 Uhr
@Skyemugen
Was nutzt das echo, wenn danach das Fenster zugeht und man das echo nicht mehr lesen kann?
Ich habe ja kein "exit" dahinter geschrieben - also bleibt das CMD-Fenster, aus dem ich den Batch starte, auch offen.

Tatsächlich steht das nur dort, damit eccos01 einen Hinweis darauf hat, wo im Code auf den Misserfolgsfall (für den es ja bis jetzt noch keine Handlungsanweisung gibt) zu reagieren wäre (und ja, ich hatte fast schon ein "pause" - für die Doppelklick-Fraktion - auch noch hingeschrieben) ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
04.02.2011 um 14:55 Uhr
Hallo eccos01!
... den neuen Namen aus version.txt zu ermitteln und update.zip umzubenennen
Den Ansatz dafür solltest Du, wie angemerkt, dem Teil ab Zeile 12 entnehmen können ...

Grüße
bastla
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 14:58 Uhr
Zitat von bastla:
Hallo eccos01!
> ... den neuen Namen aus version.txt zu ermitteln und update.zip umzubenennen
Den Ansatz dafür solltest Du, wie angemerkt, dem Teil ab Zeile 12 entnehmen können ...

Grüße
bastla

Vielleicht bin ich ja zu doof... aber wo liesst Du (ab Z.12) den neuen Dateinamen aus der Datei "version.txt"?

der rename / Move ist ja klar.
Bitte warten ..
Mitglied: bastla
04.02.2011 um 15:00 Uhr
Hallo eccos01!
aber wo liesst Du (ab Z.12) den neuen Dateinamen aus der Datei "version.txt"?
Na in Zeile 12 (bei mir landet beim Entpacken die "version.txt" = %Datei% im TEMP-Ordner = %Ziel%)

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 15:00 Uhr
Aloha bastla,

bei mir ging das ganze Fenster zu, wenn ich die .bat ausgeführt habe und die Datei nicht da war ... darum verwunderte es mich (Angehöriger der Doppelklickfraktion ^.^)

@eccos

... wieder mal nur die halbe Info gegeben? Da hätte man sich das Extrahieren auch sparen können (extra das Suchen, Testen und Schreiben ... achja)

greetz André
Bitte warten ..
Mitglied: bastla
04.02.2011 um 15:03 Uhr
@Skyemugen
bei mir ging das ganze Fenster zu, wenn ich die .bat ausgeführt habe
... aber nur, wenn es auch vorher nicht offen war ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 15:05 Uhr
@bastla

logisch nicht, ich muss ja den Enduser darstellen, der hat keine Shell offen und macht nur Doppelklick ;) (und da müsste dann pause hin)

greetz André
Bitte warten ..
Mitglied: bastla
04.02.2011 um 15:07 Uhr
@Skyemugen
den Enduser darstellen, der hat keine Shell offen und macht nur Doppelklick
... oder dragged und dropped ...
(und da müsste dann pause hin)
ACK

Grüße
bastla
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 15:47 Uhr
Moment...

Du benutzt aber nicht den Inhalt von version.txt sondern würdest den dateinamen von version.txt als neuen dateinamen verwenden, oder???

Wie müßte das Kommando denn lauten, wenn ich aus einer Datei mit Namen: "version.txt" einen String auslesen will, der den neuen Namen enthält... und zwar in der Form "update-1.2.3.4.zip"???
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 15:49 Uhr
@eccos

... wieder mal nur die halbe Info gegeben? Da hätte man sich das Extrahieren auch sparen können (extra das Suchen,
Testen und Schreiben ... achja)

greetz André

"mea culpa"
Sorry
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 15:54 Uhr
Aloha,

Zitat von bastla:
Als weitere Voraussetzung muss der Inhalt der ersten Zeile von "version.txt" einen gültigen Dateinamen ergeben.

Dabei fällt mir auf (oder ein) ... das .zip ist weg und nur die extrahierte Datei (mit dem Namen aus Zeile eins der version.txt) ist im Ordner %Bak% ...

(set /p ... sollte das irgendwo zum Tragen kommen?)
Bitte warten ..
Mitglied: bastla
04.02.2011 um 16:17 Uhr
Hallo eccos01!
Du benutzt aber nicht den Inhalt von version.txt sondern würdest den dateinamen von version.txt als neuen dateinamen verwenden, oder???
Nein (hätte ja auch keinen Sinn )
Wie müßte das Kommando denn lauten, wenn ich aus einer Datei mit Namen: "version.txt" einen String auslesen will, der den neuen Namen enthält... und zwar in der Form "update-1.2.3.4.zip"???
Wenn, wie von Dir oben beschrieben, in der Datei "version.txt" dieser neue Dateiname steht, dann:
set /p NameNeu=<version.txt
BTW: Wozu braucht eine Frage 3 Fragezeichen (oder 2 Fragen 6 Stück )?
@Skyemugen
(set /p ... sollte das irgendwo zum Tragen kommen?)
Ja - so wie gleich oberhalb gezeigt.
das .zip ist weg und nur die extrahierte Datei (mit dem Namen aus Zeile eins der version.txt) ist im Ordner %Bak% ...
Dort sollte aber nicht die extrahierte "version.txt", sondern eben die .zip-Datei gelandet sein (mittlerweile getestet ist sie das bei mir auch).

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 17:21 Uhr
Zitat von bastla:
Dort sollte aber nicht die extrahierte "version.txt", sondern eben die .zip-Datei gelandet sein (mittlerweile getestet
ist sie das bei mir auch).

Aloha bastla,

tja nun, was soll ich sagen 4. Test, diesmal @home (Win 7 statt XP wie auf Arbeit, macht aber keinen Unterschied)

Szenario:

  • update.zip wie gehabt mit enthaltener version.txt (in Zeile eins stehtt 27.1.3b
  • .cmd-Datei liegt im e:\ (zip dort wo sie nach Pfad hingehört, nur e:\... statt d:\...)
  • Datei wird ausgeführt (Ordnerstruktur bereits vorhanden) ...

Resultat:

  • update.zip ist weg
  • im Ordner %Bak% (also bei mir: E:\test\backup_updates\) liegt jetzt eine 27.1.3b (3B-Datei) ...

Bin ich heute so neben der Spur oder mögen mich die Fenster heute nicht?

greetz André
Bitte warten ..
Mitglied: bastla
04.02.2011 um 17:30 Uhr
Hallo Skyemugen!
Eigentlich sollte (lt Beschreibung des TO: "update-1.2.3.4.zip") in der "version.txt" zumindest
27.1.3b.zip
stehen - deswegen auch mein Hinweis auf einen gültigen Dateinamen.

Wenn Du dem Namen Deiner Datei im Ordner %Bak% noch ein ".zip" anfügst, solltest Du sie auch wie gewohnt öffnen können und darin die "version.txt" finden - schließlich ist es ja die zwar verschobene und umbenannte, aber originale "update.zip" ...

Wenn dem auch bei Dir so ist, hätten wir den Status (Zitat Biber) "works as designed" erreicht. ;-.)

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 17:41 Uhr
Aloha,

aha achso na gut ... hab ich anders interpretiert, was der TE da zusammengestammelt hat dann geht's ja ... wozu auch immer das Ding jetzt .zip heissen muss, wenn nix drin ist

greetz André
Bitte warten ..
Mitglied: bastla
04.02.2011 um 17:45 Uhr
Hallo Skyemugen!
wozu auch immer das Ding jetzt .zip heissen muss, wenn nix drin ist
Dass nix drin wäre ist aber nicht der Soll-Zustand - eigentlich müsste der gesamte Inhalt (und wenn's nur eine "version.txt" ist) noch vorhanden sein, da es sich ja um die Ausgangs-ZIP-Datei handelt (jetzt eben mit neuem Namen an neuem Ort).

Grüße
bastla
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 17:45 Uhr
Zitat von bastla:
Hallo eccos01!
> Du benutzt aber nicht den Inhalt von version.txt sondern würdest den dateinamen von version.txt als neuen dateinamen
verwenden, oder???
Nein (hätte ja auch keinen Sinn )
> Wie müßte das Kommando denn lauten, wenn ich aus einer Datei mit Namen: "version.txt" einen String
auslesen will, der den neuen Namen enthält... und zwar in der Form "update-1.2.3.4.zip"???
Wenn, wie von Dir oben beschrieben, in der Datei "version.txt" dieser neue Dateiname steht, dann:
set /p NameNeu=<version.txt 
> 
BTW: Wozu braucht eine Frage 3 Fragezeichen (oder 2 Fragen 6 Stück )?
@Skyemugen
> (set /p ... sollte das irgendwo zum Tragen kommen?)
Ja - so wie gleich oberhalb gezeigt.
> das .zip ist weg und nur die extrahierte Datei (mit dem Namen aus Zeile eins der version.txt) ist im Ordner %Bak% ...
Dort sollte aber nicht die extrahierte "version.txt", sondern eben die .zip-Datei gelandet sein (mittlerweile getestet
ist sie das bei mir auch).

Grüße
bastla


So... auch ich hab es verstanden und es klappt!

Wie kann ich denn testen, ob das was in der Datei bzw. nach dem set in der Umgebungsvariable steht, mit "update-" beginnt?
Kann man irgendwie sowas wie "begins" testen?
Bitte warten ..
Mitglied: bastla
04.02.2011 um 17:50 Uhr
Hallo eccos01!

Etwa so:
echo %NameNeu%|findstr /i /b "update-" >nul && echo is ok || echo das war wohl nix
Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
04.02.2011 um 17:52 Uhr
Aloha,

hm ne war mal wieder ein Freitagsfehler von mir ^.^ hab einfach umbenannt in .zip aber ist nicht höhö - hab's nochmal nach TE-Standard getestet, haut schon hin je näher das WE rückt, desto mehr ist mein brain im Energiesparmodus

greetz André

ach herrje so viele postings für nichts ... der reinste spam schon fast - sollte mal wer aufräumen => fusen

edit:
Die Datei version.txt innerhalb des Archives (update.zip) enthalt folgenden text "update-1.2.3.4.zip".

Stand das schon den ganzen Tag da? ... au weia, da hab ich schon Kontaktlinsen drin ...
Bitte warten ..
Mitglied: eccos01
04.02.2011 um 17:54 Uhr
Zitat von bastla:
Hallo eccos01!

Etwa so:
echo %NameNeu%|findstr /i /b "update-" >nul && echo is ok || echo das war 
> wohl nix 
> 
Grüße
bastla

Stimmt... heute hab ich echt ein Brett vor dem Kopf.

findstr benutze ich in meinen Skripten so oft...

Danke!!!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst In Html-Datei per Batchdatei das Datum und die Uhrzeit eintragen (2)

Frage von Hakiegold zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Batch & Shell
gelöst Datei in Ordner mit Batchdatei suchen und weiterverarbeiten (2)

Frage von MichaelWiggen zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...