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
GELÖST

Variable auslesen und Text ab einem bestimmten Zeichen in eine neue Variable schreiben

Frage Entwicklung Batch & Shell

Mitglied: 3xplor3r

3xplor3r (Level 1) - Jetzt verbinden

13.11.2011 um 14:36 Uhr, 4133 Aufrufe, 7 Kommentare

Hallo liebe Gemeinde,

ich möchte aus einer Variable, die innerhalb einer FOR-Schleife deklariert wird ab einem bestimmten Zeichen den gesamten nachfolgenden Text in die gleiche oder eine andere Variable verschieben.

for /R "%download%" %%i in (*.mp3) do (
for /F "tokens=* delims=\" %%j in ("%%i") do ?)

In dieser geschachtelten FOR-Schleife lese ich alle *.mp3 Dateien ab dem Verzeichnis %download% aus. Jetzt möchte ich diese Dateien noch neu encodieren, was dann an der Stelle des ? folgen würde. Da allerdings x mp3-Dateien verarbeitet werden, bekomme ich ein Problem mit den Dateinamen, da lame nur ein statisches Ausgabeverzeichnis unterstützt.

lame -b 192 -B 256 -m j -V 2 -h --vbr-new -t --priority 4 --brief "%%i" "%upload%%%k"

Dieses wäre das %upload%-Verzeichnis bspw. C:\Dokumente und Einstellungen\Upload. Nun würde das Encodieren dazu führen, dass eine mp3-Datei mit dem Namen Upload.mp3 in diesem Verzeichnis erzeugt werden würde. Daher jetzt der Gedanke, dass ich in die Variable %%k den Dateinamen des Musikstückes speichere. Die Musikdatei liegt bspw. im Verzeichnis C:\Dokumente und Einstellungen\Download\Titel1.mp3. Dazu wird nun der Teil benötigt, der hinter dem letzten \ steht. Mit anderen Worten muss ich das letzte \ oderr wenn man von hinten liest das erste \ finden und dann den Text der dahinter oder davor folgt in eine neue Variable speichern, es kann auch die gleiche sein, falls technisch möglich.

Darauf hin könnte ich beim Aufruf von lame für das Ausgabeverzeichnis diese Variable anhängen, wodurch der Name des Titels gleich bleibt.

Nur weiß ich im Moment noch nicht, wie ich das realisieren könnte.

LG
3x
Mitglied: pieh-ejdsch
13.11.2011 um 15:36 Uhr
moin 3xplor3r,

wenn Du bestimmte Befehle an der CMD benutzt - hilft bei Problemen die ...

... ja die Hilfe (gleich mit den Expandierten ausortiert)
01.
for/?|find /i "%~nxI"
Friemler hat das hier im Tutorial zur FOR-Schleife nochmal zusammengefasst.

Gruß Phil
Bitte warten ..
Mitglied: Biber
13.11.2011 um 15:38 Uhr
Moin 3xplor3r,

willkommen im Forum.

Wenn ich deine Anforderung richtig verstanden habe, dann ist keine Zwischenvariable nötig.
Ich würde es nach folgendem proof of concept am CMD-Prompt umsetzen:
[Anmerkung: Da du so lange Pfade verwendest, sollest du dir mit "Set mode con cols=166 lines=55" ein weing Platz zum Testen schaffen]
>set "lameparms=-b 192 -B 256 -m j -V 2 -h --vbr-new -t --priority 4 --brief" 
 
(=15:25:40  d:\Biber\temp=) 
>set "upload=x:\oder y\upload" & set "download=C:\Dokumente und Einstellungen\Download" 
 
(=15:25:55  d:\Biber\temp=) 
>@for /R "%download%" %i in (*.mp3) do @echo DEMO: lame %lameparms% "%~i" "%upload%\%~nxi" 
DEMO: lame -b 192 -B 256 -m j -V 2 -h --vbr-new -t --priority 4 --brief "C:\Dokumente und Einstellungen\Download\Der letzte Titel.mp3" "x:\oder y\upload\Der letzte 
tel.mp3" 
DEMO: lame -b 192 -B 256 -m j -V 2 -h --vbr-new -t --priority 4 --brief "C:\Dokumente und Einstellungen\Download\Der Titel 1.mp3" "x:\oder y\upload\Der Titel 1.mp3" 
DEMO: lame -b 192 -B 256 -m j -V 2 -h --vbr-new -t --priority 4 --brief "C:\Dokumente und Einstellungen\Download\Der Titel 2.mp3" "x:\oder y\upload\Der Titel 2.mp3"
Sollte also mit dem Einzeiler, der mit "@FOR /R "%download%"...." beginnt nach Definition der drei Variablen ohne weiteren Heckmeck ausreichen.

Grüße
Biber
Bitte warten ..
Mitglied: 3xplor3r
13.11.2011 um 17:10 Uhr
Hallo Biber,

danke erstmal für Deine Antwort. Ich habe zum Test

@for /R "%download%" %%i in (*.mp3) do echo "%%i\%~nxI"

in die Batch-Datei eingetragen. Als Ausgabe hätte ich bspw. Der Titel 1.mp3 erwartet. Leider konnte die Batch-Datei nicht ausgeführt werden. Lasse ich %~nxI weg, wird der gesamte Pfad ausgegegben.
Bitte warten ..
Mitglied: Biber
13.11.2011 um 17:19 Uhr
Moin 3xplor3r,

in einer Batchdatei müssen die Prozentzeichen bei allen Laufvariablen verdoppelt werden, also auch %%~nxi (statt %~nxi).

Und bitte beachten: bei diesen dynamischen Variablen wird zwischen Klein- und Grossschreibung unterschieden, also ist %i <>%I (oder %a<>%A)

Grüße
Biber
Bitte warten ..
Mitglied: 3xplor3r
13.11.2011 um 18:49 Uhr
Ahh das habe ich übersehen, danke Dir. Die folgende Lösung funktioniert so wie sie soll.

@for /R "%download%" %%i in (*.mp3) do lame %lame% "%%i" "%upload%\%%~nxi"

So werden die Dateien in das Verzeichnis %upload%\01 Der Titel.mp3 geschrieben.
Bitte warten ..
Mitglied: Skyemugen
14.11.2011 um 07:48 Uhr
[OT]Aloha Jungs!

Was'n los hier, seht ihr schon Dinge, die nicht da sind oder warum gibt niemand dem TE den Vorschlag zur Ansichtsverbesserung der Skriptschnipsel im Forum per <code></code> Codeformatierung?

Ihr lasst nach

greetz André[/OT]
Bitte warten ..
Mitglied: Biber
14.11.2011 um 08:07 Uhr
[OTii]
Zitat von Skyemugen:
[OT]Aloha Jungs!

Was'n los hier, seht ihr schon Dinge, die nicht da sind oder warum gibt niemand dem TE den Vorschlag zur Ansichtsverbesserung
der Skriptschnipsel im Forum per <code></code> Codeformatierung?
Haben wir gesehen. Das Verfahren wurde wegen Geringfügigkeit eingestellt.
... drei verschüchterte skizzerten Halbzeilen.... Schwamm drüber.

Zudem hat er das noch gestern am späten Nachmittag auch von bastla aufs Brot bekommen.

greetz André[/OT]
Grüße zurück
Biber
[/OTii]
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...