copro
Goto Top

Batch - Aktueller Ordner als Variable speichern

Hallo zusammen

Kennt jemand eine einfach möglichkeit in einem Batch den aktuellen Ordner in dem man sich befindet in eine Variable zu speichern?

MfG
Copro

Content-Key: 15681

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

Printed on: April 23, 2024 at 07:04 o'clock

Member: superboh
superboh Sep 08, 2005, updated at Mar 29, 2023 at 23:10:28 (UTC)
Goto Top
Hallo Copro,

versuch mal folgendes:

cd > %temp%\tempfile.txt
set /p Verz=<%temp%\tempfile.txt
del %temp%\tempfile.txt

Mag sein dass es auch ohne den Umweg über die Textdatei geht ... (hallo @Biber ?)

Gruss,
Thomas
Mitglied: 16640
16640 Sep 08, 2005 at 05:40:12 (UTC)
Goto Top
Du hast leider nicht geschrieben, unter welcher Betriebssystemversion. Hier ein Auszug aus der Hilfe zum SET-Befehl unter W2KPro:

Wenn die Befehlserweiterungen aktiviert sind, gibt es mehrere dynamische
Umgebungsvariablen, die zwar erweiterungsfähig sind, aber nicht in der Liste
von Variablen auftauchen, die mit SET angezeigt werden. Diese Variablenwerte
werden bei jeder Werterweiterung der Variable dynamisch berechnet. Falls eine
Variable mit einem dieser Namen definiert wird, dann überschreibt diese
Definition die unten stehende dynamische Definition:

%CD% - expandiert zum aktuellen Verzeichnisnamen.


Beispielweise funktioniert hier ein 'echo %CD%' auf der Kommandozeile problemlos.
Member: Biber
Biber Sep 08, 2005, updated at Mar 29, 2023 at 23:10:46 (UTC)
Goto Top
@superboh
Jepp, ginge natürlich:

for /f %i in ('cd') do set verz=%i  

Aber: auch für den "FOR /F" Befehl ist Win2k/WinXP nötig, und da gibt es die von dba beschriebene Umgebungsvariable %CD%.

Für universellen Einsatz (Win9x, DOS x.xx..) ist Dein Weg der allgemein verwendbare.

@copro:
Ich weiß nicht, wofür Du das Verzeichnis in einer Variablen brauchst, aber für die normal denkbaren Anwendungsfälle (aktuelles Verzeichnis merken, Verzeichnis wechseln, rumalbern, wieder ins ursprüngliche Verzeichnis zurück) gibt es jetzt die PUSHD / POPD-Mimik. Die macht vieles einfacher. Schau mal in die Hilfe.

Grüße
Frank / der Biber aus Bremen
Member: copro
copro Sep 08, 2005, updated at Mar 29, 2023 at 23:11:12 (UTC)
Goto Top
Ich bin ein schlechter Poster sorry =)

Vorab ich benutze Win XP
Es geht mir mal wieder um mein Desktop Script...
Da es ja sein kann das Mp3 z.B. so abgelegt sind:

Ordner
Unterordner
Mp3

ich habe mir ein Batch erstellt der alle Ordner und Unterordner in eine TXT haut...
Danach wird mit FOR jede Zeile abgearbeitet und geprüft ob sich eine MP3 Datei darin befindet...
Fals eine existiert wird der ganze Ordner an einen anderen Ort kopiert....
Nun müsste ich das Verzeichniss in einer Variable haben um die Mp3 auch wieder in einen gleichnamigen Ordner kopieren zu können....

Was wichtig ist ich brauche NUR den Ordnername nicht aber den Pfad...

dir /b /s "C:\Dokumente und Einstellungen\DruGChiLD\desktop\" > c:\clrdesk\desktop_all.txt  

find /v "." c:\clrdesk\desktop_all.txt > c:\clrdesk\desktop_folders.txt  

for /F "tokens=*" %a in (c:\clrdesk\desktop_folders.txt) do dir /b "%a\*.mp3" & if exist "%a\*.mp3" xcopy "%a\*.*" "c:\test\VARIABLE\*.*"  

Ich weiss nicht ob es für mein Prob ne einfachere Lösung gibt, wenn jemand ne Idee hat nur zu....
Member: Biber
Biber Sep 08, 2005, updated at Mar 29, 2023 at 23:11:49 (UTC)
Goto Top
@copro
*gg "DruGChiLD" ist gut...gefällt mir face-wink

ich denke schon, dass es etwas einfacher ginge (Oneliner sind ja immer einfach *sfg), aber nicht, dass Du da viel Hilfe brauchst.

Schau dir mal den "FOR /R...IN....DO"-Befehl an. Der bringt Dich da Lichtjahre voran.

So sinngemäß sollte es gehen...
FOR /R "C:\Dokumente und Einstellungen\DruGChiLD\desktop" %%a IN (*.mp3) DO xcopy /S /i Y ~pnx%%a  c:\test   

(total ungetestet, aber die Richtung stimmt)

Hab grade keine Zeit, kann aber gerne nochmal helfen, wenn Du -wider Erwarten- es nicht allein hinbekommst. (Die Skizze oben nicht gleich so ausprobieren, wer weiß was dann passiert!! *feix*)
Member: copro
copro Sep 08, 2005 at 16:59:27 (UTC)
Goto Top
Ja das ist mein eigentlicher Nick, kommt in Foren einfach nicht so gut ;)

Das For /R muss ich wohl übersehen haben ;)
Erleichtert einiges aber löst nicht mein Prob. , dass alle Mp3 auf meinem Desktop
in einen Ordner kommen...

Stell dir mal vor ich lade von rapchek.de 4 Alben runter... Bei herunterahren werden die alle in einen Ordner geschoben....

Am nächsten Tag hab ich kein Plan mehr welche MP3 zu welchem album gehört...

Und deshalb muss ich es noch irgentwie hinbekommen, dass Quellordnername = Zielordnername ist...

Danke dir auf jeden fall schon mal für deine Hilfe

MfG
Batcher
Member: Biber
Biber Sep 08, 2005, updated at Mar 29, 2023 at 23:13:28 (UTC)
Goto Top
Nö, nö, copro,

die *.mp3s sollen ja auch nicht in einen Ordner... das hab ich auch schon verstanden.

Der FOR /R - Befehl wackelt ja die gesamte Ordnerstruktur durch, "steht" also sozusagen bei jeder Ausführung der "DO was-auch-immer"-Anweisung in einem anderen Verzeichnis.

damit würde ich es so machen (als Batch)

auf den Desktop leg ich ein SUBST.... ich nenn es Laufwerk s:

@echo off  & subst s: "%HOMEPATH%%HOMEDRIVE%\Desktop"  
:: oder...  & subst s: "%USERPROFILE%\Desktop" ..oder ...subst s: "C:\Dokumente....\Desktop"  

:: ergibt bei mir
>dir /s /b s:\*.mp3
s:\eins\zwei\drei\album9.mp3
s:\eins\zwei\vier\album7.mp3
s:\eins\zwei\vier\album9.mp3

darauf mach ich ein:

for /r s: %i in (*.mp3) do @echo xcopy /s /y /i %~i c:\MusikOrdner%~pnxi
xcopy /s /y /i S:\eins\zwei\drei\album9.mp3 c:\MusikOrdner\eins\zwei\drei\album9.mp3
xcopy /s /y /i S:\eins\zwei\vier\album7.mp3 c:\MusikOrdner\eins\zwei\vier\album7.mp3
xcopy /s /y /i S:\eins\zwei\vier\album9.mp3 c:\MusikOrdner\eins\zwei\vier\album9.mp3

Wenn es das ist, was Du willst, lösche halt das ECHO und die kopierten *.mp3s

-------- snipp -- DruGChiLDsMP3CopY.bAt
@echo off  & subst s: "%USERPROFILE%\Desktop"  
for /r s: %%i in (*.mp3) do (xcopy /s /y /i %%~i c:\MusikOrdner%%~pnxi) && del %%~i
subst s: /d
------- snapp DruGChiLDsMP3CopY.bAt

Diese drei Batchzeilen meinte ich vorhin. face-big-smile

HTH
Frank / der bIbeR aus Bremen
[Edit] Tippfehlerberichtigung (s.u.) [/Edit]
Member: copro
copro Sep 08, 2005 at 21:11:48 (UTC)
Goto Top
Ok jetzt hab ich es verstanden =)
Besser aufzeigen konnte man es ja auch nicht...

Muss ganz ehrlich sagen mit diesen %~pnxi Syntaxen habe ich bisher noch nicht gearbeitet =)
Ich habe verstanden was der Patch macht und wie er abläuft nur wenn ich ihn übernehemen will kommt die Meldung

Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters ist ungültig: %~pnxI

Wie gesagt ich peil das noch nicht ganz mit der Syntax...

Könntest du mir noch sagen was daran falsch ist?
Dann steht der Teil ja schon =)

Kann mich nur nochmals herzlich bedanken =)
Member: copro
copro Sep 08, 2005 at 22:30:32 (UTC)
Goto Top
@Biber Ober Hammer Thx A lot man =)

so passt das ganze:

@echo on & subst s: "C:\Dokumente und Einstellungen\DruGChiLD\desktop"  
md c:\MusikOrdner\
for /r s: %%i in (*.mp3) do (xcopy /s /y /i "%%~i" "c:\MusikOrdner%%~pnxi.*")  
subst s: /d
Member: Biber
Biber Sep 09, 2005 at 08:28:09 (UTC)
Goto Top
@copro

hab ich doch gleich gesagt, dass Du das schon allein hinbekommst *gg
Trotzdem sorry für das vergessene "%" - wollte ja nur nur testen, ob Du mitdenkst *feix*
Den Tippfehler korrigiere ich oben in meinem Post (falls irgendeiner diesen Thread nicht bis zu Ende liest).

Letzte Anmerkung:
Du löschst die *.mp3's nicht nach dem Kopieren? Why not?
Dann würde ich wenigstens den xCopy erweitern um Schalter "/D", damit er nur jeweils die neuen *.mp3s kopiert und nicht jeden Tag alle.
Schönes Wochenende
Biber
P.S. Die Zeile kannst Du wieder löschen: "md c:\MusikOrdner\" oder ändern in "if not exist c:\MusikOrdner md c:\MusikOrdner\"