tompazi
Goto Top

Automatisch erweitende Ordnernamen (Schleife?)

Hallo wiedermal

Ich will etwas schreiben womit ich Ordner Namen automatisch "erweitern" kann.

also so

if not exist D:\blabla md D:\blabla
if exist D:\blabla md D:\blabla (2)
if exist D:\blabla (2) md D:\blabla (3)

so in die richtung mir schon klar das das so nicht geht.
also es soll sich automatisch bis ins unendliche weiter gehen.
Und ich weiß nicht wie.
und eine Frage noch wie kann ich den benutzernamen von dem der gerade angemeldet ist anzeigen? so ähnlich wie %date%

Danke im voraus

Thomas

Content-Key: 65359

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

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

Member: Biber
Biber Aug 02, 2007 at 21:49:46 (UTC)
Goto Top
Moin Tompazi,

  • zur zweiten Teilfrage: das steht in der Variable %username%, die immer gesetzt ist.

  • zur ersten Teilfrage: Handwerklich lösbar, aber als Idee nicht von bestechendem Charme.

Gibt es für so einen ...hmmmm... Plan eine überzeugende Notwendigkeit?
Das sieht doch so elegant aus wie Münteferings Socken.
Was steht den für ein Prozess/für ein Ablauf dahinter?

Grüße
Biber
und gewöhnt euch das "Danke im Voraus" ab, sonst werd ich ausschweifend...*gg
Member: Tompazi
Tompazi Aug 02, 2007 at 21:54:10 (UTC)
Goto Top
naja ich will so was da ein bauen

@echo off
title USB Stick %date:~-10,2%.%date:~-7,2%.%date:~-4%
IF NOT exist M:\ goto Antwort0
setlocal
set "monat1=%date:~-7,2%"
if "%monat1%"=="01" set "monat=Jänner"
if "%monat1%"=="02" set "monat=Februar"
if "%monat1%"=="03" set "monat=März"
if "%monat1%"=="04" set "monat=April"
if "%monat1%"=="05" set "monat=Mai"
if "%monat1%"=="06" set "monat=Juni"
if "%monat1%"=="07" set "monat=Juli"
if "%monat1%"=="08" set "monat=August"
if "%monat1%"=="09" set "monat=September"
if "%monat1%"=="10" set "monat=Oktober"
if "%monat1%"=="11" set "monat=November"
if "%monat1%"=="12" set "monat=Dezember"
set /p "dataname= Beispiel Ordner Namen verwenden (USB Stick %date:~-10,2% %monat% %date:~-4%) (J/N)?"

::HIER
if /i "%dataname%"=="J" set "datname=USB Stick %date:~-10,2% %monat% %date:~-4%"

GOTO :copy
if /i "%dataname%"=="N" set /p "datname= Geben Sie den einen Ordnernamen ein:"
GOTO :copy
:copy
XCOPY M:\ "D:\%datname%" /I /E
goto Antwort1
:Antwort0
echo Der USB Stick ist nicht korrekt Angesteckt!
echo Beachten Sie, dass der USB Stick Vorne am PC angesteckt sein muss.
echo Sollten Sie alles Richtig befolgt haben und Dies erscheint immer noch
echo kontaktieren Sie Bitte den Produzenten der Batch Datei.
pause
exit
:Antwort1
echo Die Dateien Ihres USB Sticks wurden erfolgreich nach D:\%datname%
echo kopiert.
echo.
set /p "Antwort=Dateien auf dem Stick entfernen (J/N)?"
if /i "%Antwort%"=="J" goto :Loeschen
echo Keine Daten entfernt ...
Goto :open
pause
exit
:Loeschen
rd /s /q M:echo Daten wurden entfernt...
echo.
PING 127.0.0.1 -n 6 >nul
echo Der USB Stick kann jetzt ausgesteckt werden.
:open
echo.
set /p "open= Ordner aufmachen? (J/N)"
if /i "%open%"=="J" start D:\"%datname%"
pause

Danke für das %username% gibt es irgendwo eine liste von diesen dingen?

Danke

Thomas
Member: Biber
Biber Aug 02, 2007 at 22:08:11 (UTC)
Goto Top
Moin Tompazi,

Danke für das %username% gibt es irgendwo eine liste von diesen dingen?

Alle Umgebungsvariablen werden Dir durch Eingabe von "Set" am CMD-Prompt angezeigt.
Ein bisschen was dazu steht auch in der Hilfe (Set /?).

Du könntest den "höchsten" angelegten Ordner in einer FOR /L- Anweisung ermitteln.

Bsp im Batch:
...
...(nur wenn es wenigstens EINEN Ordner mit diesem Pseudo-Index gibt)

Set Idx=2
for /l %%i in (%idx%,1,222) do if exist "d:\temp\blabla(%%i)" set "idx=%%i"  
REM wenn der "höchste" Ordner bis jetzt "d:\temp\blabla(47)" war, ist %idx% jetzt 47  
set /a idx+=1
REM jetzt wäre %idx% gleich 48
Md "d:\temp\blabla(%idx%)"  
[statt "unendlich" habe ich oben mal als Max-Wert 222 gesetzt.]

Aber nobelpreisverdächtig ist das alles nicht...
.....sieht doch shice aus im Ergebnis...

Grüße
Biber
Member: Tompazi
Tompazi Aug 02, 2007 at 22:24:36 (UTC)
Goto Top
Erstmal Danke
Frage wieso das temp?
Ich habs (dumm wie ich bin) gleich mal verändert -.- .
Und so geht es nicht.

set /p "dataname= Beispiel Ordner Namen verwenden (USB Stick %date:~-10,2% %monat% %date:~-4%) (J/N)?"
if /i "%dataname%"=="J" set "datname=USB Stick %date:~-10,2% %monat% %date:~-4%" GOTO :check
if /i "%dataname%"=="N" set /p "dateiname= Geben Sie den einen Ordnernamen ein:"
GOTO :copy
:check
Set Idx=2
for /l %%i in (%idx%,1,22) do if exist "d:\%dataname%(%%i)" set "idx=%%i"
set /a idx+=1
set "dateiname=%dataname%(%idx%)"
:copy
XCOPY M:\ "D:\%dateiname%" /E
goto Antwort1
Member: Biber
Biber Aug 02, 2007 at 22:48:39 (UTC)
Goto Top
Hmm...<grinz>...

würde sich das Verhalten Deines Schnipsels eventuell geringfügig ändern, wenn Du überall als Variablennamen "dataname" verwendest und nicht drei verschiedene Variationen (dataname, datname und dateiname)? *wimpernklapp*

Bei mir hat das schon mal geholfen! *TippGeb*

P.S. Das "temp" hatte ich nur in meinem separaten Demo-Beispiel verwendet...
Hat keinen Bezug zu Deinem Schnipsel.

Grüße
Biber
Member: Tompazi
Tompazi Aug 02, 2007 at 23:04:22 (UTC)
Goto Top
so? geht trotzdem nicht...
es macht noch immer nur den "USB Stick %date:~-10,2% %monat% %date:~-4%" Ordner
Und noch eine frage weil ich grad bei set nachgeschaut hab kann man %random% irgendwie eingrenzen also nicht das zwischen 0 und 32767 is sondern 1-100?
set /p "dataname= Beispiel Ordner Namen verwenden (USB Stick %date:~-10,2% %monat% %date:~-4%) (J/N)?"
if /i "%dataname%"=="J" set "dataname=USB Stick %date:~-10,2% %monat% %date:~-4%" GOTO :check
if /i "%dataname%"=="N" set /p "dataname= Geben Sie den einen Ordnernamen ein:"
GOTO :copy
:check
Set Idx=2
for /l %%i in (%idx%,1,222) do if exist "d:\%dataname%(%%i)" set "idx=%%i"
set /a idx+=1
set "dataname=%dataname%(%idx%)"
:copy
XCOPY M:\ "D:\%dataname%" /I /E
goto Antwort1

Thomas
Member: Biber
Biber Aug 03, 2007 at 04:44:46 (UTC)
Goto Top
Moin Tompazi,

sorry, eine mögliche Fehlersache hab ich gestern überlesen.
Das GOTO hängt ja syntaktisch in der Luft.
...
REM ?? if /i "%dataname%"=="J" set "dataname=USB Stick %date:~-10,2% %monat% %date:~-4%" GOTO :check  
REM gemeint vermutlich:
if /i "%dataname%"=="J" (   
        set "dataname=USB Stick %date:~-10,2% %monat% %date:~-4%"   
        GOTO :check
)
...

Zur zweiten Frage: Den %random%-Bereich auf bestimmte Ober-/Untergrenzen festlegen..
Im Prinzip genau wie mit anderen Skriptsprachen auch, handwerklich allerdings mit dem Modulo-Operator.

REM Bsp: Random-Wert SOLL zwischen 13 (incl.) und 296 liegen
REM %random% IST immer zwischen 0 und 32767, das ist halt so im CMD-Kontext.
Set /a "myMin=13" & Set /a "myMax=296"  
Set /a "myRandom=%myMin% + (%random% %% %myMax%)"  
...

Grüße
Biber
Member: Tompazi
Tompazi Aug 03, 2007 at 13:02:58 (UTC)
Goto Top
Hallo
es funktioniert schon fast.
es erstellt leider gleich einen "USB Stick %date:~-10,2% %monat% %date:~-4% (3)" Ordner.
set /p "dataname= Beispiel Ordner Namen verwenden (USB Stick %date:~-10,2% %monat% %date:~-4%) (J/N)?"
if /i "%dataname%"=="J" (
set "dataname=USB Stick %date:~-10,2% %monat% %date:~-4%"
GOTO :check
)
if /i "%dataname%"=="N" set /p "dataname= Geben Sie den einen Ordnernamen ein:"
GOTO :copy
:check
Set Idx=2
for /l %%i in (%idx%,1,222) do if exist "d:\%dataname%(%%i)" set "idx=%%i"
set /a idx+=1
set "dataname=%dataname%(%idx%)"
:copy
XCOPY M:\ "D:\%dataname%" /I /E

Und ein weiteres Porblem das vorher nicht da war

set /p "open= Ordner aufmachen? (J/N)"
if /i "%open%"=="J" start D:\%dataname%

Wenn ichs so mache sagt er D:\Usb nicht gefunden
---

if /i "%open%"=="J" start D:\"%dataname%"

So hab ichs vorher gehabt und es hat funktionert aber jetzt sagt er mir D:\"Usb stick ..." nicht gefunden

---
if /i "%open%"=="J" start "D:\%dataname%"

Und so öffnets logischerweise ein neuses cmd Fenster

Danke
Thomas