andrel
Goto Top

Verzeichnis erstellen, wenn vorhanden +1

Hallo Profis,
ich frage ab ob ein Verzeichnis mit Namen "Hunde" existiert, soweit OK
Wenn da Verzeichnis existiert, möchte ich ein neues Verzeichnis erstellen z.B. Hunde-1.
Es sollte möglich sein das bis zu drei Verzeichnisse erstellt werden können.
Also Hunde-1, Hunde-2, Hunde-3

Bisher fehlt mir der Ansatz, habt ihr einen Tipp?
Besten Dank im voraus.
Gruss André

Content-ID: 24110067991

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

Ausgedruckt am: 22.11.2024 um 00:11 Uhr

michi1983
michi1983 17.10.2023 um 09:33:22 Uhr
Goto Top
Hallo,

und die Entscheidung ob du 1, 2 oder 3 Unterordner erstellen möchtest, möchtest du mittels Input Parameter steuern?

Gruß
8585040390
8585040390 17.10.2023 um 09:41:14 Uhr
Goto Top
Hi.

Shell:
#!/bin/bash

base_folder="Hunde"  

if [ -d "$base_folder" ]; then  
    # Base folder "Hunde" exists 
    counter=1
    while [ -d "${base_folder}-${counter}" ]; do  
        ((counter++))
    done

    new_folder="${base_folder}-${counter}"  
    mkdir "$new_folder"  
    echo "Neuer Ordner erstellt: $new_folder"  
else
    # Base folder doesn't exist 
    mkdir "$base_folder"  
    echo "Neuer Basismappenordner erstellt: $base_folder"  
fi
chkdsk
chkdsk 17.10.2023 um 09:41:21 Uhr
Goto Top
Moin, geht bestimmt auch kürzer aber hier mal fix ein Beispiel mit Powershell.
# Verzeichnis "Hund" überprüfen 
if (-not (Test-Path -Path "C:\temp\Hund" -PathType Container)) {  
    New-Item -Path "C:\temp\Hund" -ItemType Directory  
}

# Überprüfen, ob "Hund-1" existiert 
elseif (-not (Test-Path -Path "C:\temp\Hund-1" -PathType Container)) {  
    New-Item -Path "C:\temp\Hund-1" -ItemType Directory  
}
# Überprüfen, ob "Hund-2" existiert 
elseif (-not (Test-Path -Path "C:\temp\Hund-2" -PathType Container)) {  
    New-Item -Path "C:\temp\Hund-2" -ItemType Directory  
}
# Überprüfen, ob "Hund-3" existiert 
elseif (-not (Test-Path -Path "C:\temp\Hund-3" -PathType Container)) {  
    New-Item -Path "C:\temp\Hund-3" -ItemType Directory  
}
else {
    Write-Host "Bereits Hund, Hund-1, Hund-2 und Hund-3 erstellt."  
}
em-pie
em-pie 17.10.2023 aktualisiert um 09:41:51 Uhr
Goto Top
Moin,

Powershell.
Ein Ansatz (wenn auch sicherlich nicht der eleganteste)

  • Forschleife von 0-3 durchlaufen lassen
  • prüfe bei 0, ob das Verzeichnis Hund existiert (Test-Path()) wenn ja, weiter in der Schleife und mache aus Hund dann „Hund-$i“ und wieder mit Test-Path arbeiten.
  • Wenn nein, Verzeichnis anlegen und Schleife beenden…

Mit dem logischen Ansatz kannst du jetzt erstmal loslaufen und uns deinen Code zur Korrektur präsentieren face-smile
7907292512
Lösung 7907292512 17.10.2023 aktualisiert um 10:07:24 Uhr
Goto Top
$root = 'd:\ordner'  
$prefix = 'Hunde'  
$max = 3
$cnt = 1
$folder = "$root\$prefix"  
while((Test-Path $folder) -and $cnt -le $max){
    $folder = "$root\$prefix-$((++$cnt))"  
}
if ($cnt -le $max){
    new-item -type dir -Path $folder -force
}
Sid.
tio.run
em-pie
em-pie 17.10.2023 aktualisiert um 10:13:39 Uhr
Goto Top
@7907292512
deine Routine läuft aber los, egal ob es das Verzeichnis Hund gibt oder nicht.

ich frage ab ob ein Verzeichnis mit Namen "Hunde" existiert, soweit OK
Wenn da Verzeichnis existiert, möchte ich ein neues Verzeichnis erstellen z.B. Hunde-1.
7907292512
7907292512 17.10.2023 aktualisiert um 10:25:34 Uhr
Goto Top
Zitat von @em-pie:

@7907292512
deine Routine läuft aber los, egal ob es das Verzeichnis Hund gibt oder nicht.

Jepp, hatte ich kurz übersehen und es bereits nachträglich korrigiert
AndreL
AndreL 17.10.2023 um 13:05:02 Uhr
Goto Top
Hallo Sid,
der Ordner wird nicht erstellt.
Was mache ich falsch?
@echo off
set ARCHIVNAME=sicherung-%DATE%
$root = 'g:\sicherung\hundeshop\'    
$prefix = '%ARCHIVNAME%\'    
$max = 3
$cnt = 1
$folder = "$root\$prefix"    
while((Test-Path $folder) -and $cnt -le $max){
    $folder = "$root\$prefix-$((++$cnt))"    
}
if ($cnt -le $max){
    new-item -type dir -Path $folder -force
}
md $folder
pause
8585040390
8585040390 17.10.2023 um 13:21:31 Uhr
Goto Top
Zitat von @AndreL:

Hallo Sid,
der Ordner wird nicht erstellt.
Was mache ich falsch?
@echo off
set ARCHIVNAME=sicherung-%DATE%
$root = 'g:\sicherung\hundeshop\'    
$prefix = '%ARCHIVNAME%\'    
$max = 3
$cnt = 1
$folder = "$root\$prefix"    
while((Test-Path $folder) -and $cnt -le $max){
    $folder = "$root\$prefix-$((++$cnt))"    
}
if ($cnt -le $max){
    new-item -type dir -Path $folder -force
}
md $folder
pause

Ich bin zwar nicht sid, aber batch und powershell zu mixen, könnte schwierig werden. Wieso baust Du
set ARCHIVNAME=sicherung-%DATE%
während darunter die korrekte Syntax wäre?

Daran wird es relativ sicher scheitern.
7907292512
7907292512 17.10.2023 aktualisiert um 13:26:42 Uhr
Goto Top
Zitat von @AndreL:

Hallo Sid,
der Ordner wird nicht erstellt.
Was mache ich falsch?
Ohhhhh määän, das ist kein Batch, das ist Powershell ... 🙃
AndreL
AndreL 18.10.2023 um 02:06:03 Uhr
Goto Top
Hallo,
geht das auch mit Batch?
Gruss André
7907292512
Lösung 7907292512 18.10.2023 aktualisiert um 07:43:27 Uhr
Goto Top
Zitat von @AndreL:

Hallo,
geht das auch mit Batch?
Gruss André

Wenns sein muss geht alles irgendwie anno tobak (das ist scheinbar wie Herpes, geht nie wieder vollständig weg 🤮)...
@echo off &setlocal enabledelayedexpansion 
set "root=d:\ordner"  
set "prefix=Hunde"  
set max=3
set cnt=1
set "folder=%root%\%prefix%"  
:loop
if not exist "!folder!" (  
    md "!folder!"  
    goto :end
) else (
    if !cnt! GTR %max% goto :end
    set "folder=%root%\%prefix%-!cnt!"  
    set /a cnt+=1
    goto :loop
)
:end
pause
AndreL
AndreL 20.10.2023 um 03:44:22 Uhr
Goto Top
Hallo Sid,
habe das Script angepasst.
Was mich wundert, ist das bei "not exist" ein Verzeichnis erstellt werden soll.
Das Verzeichnis existiert aber schon, es soll ein neues Verzechnis mit Zusatz "-1" erstellt werden.
Verstehe ich das Script falsch?
Gruss André

@echo off &setlocal enabledelayedexpansion 
set ARCHIVNAME=sicherung-%DATE%
set "root=g:\sicherung\hundeshop\"    
set "prefix=%ARCHIVNAME%\"    
set max=3
set cnt=1
set "folder=%root%\%prefix%"    
:loop
if not exist "%root%\%ARCHIVNAME%\" (    
    md "%root%\%ARCHIVNAME%\"    
    goto :end
) else (
    if !cnt! GTR %max% goto :end
    set "folder=%root%\%prefix%-!cnt!"    
    set /a cnt+=1
    goto :loop
)
:end
pause
8585040390
8585040390 20.10.2023 aktualisiert um 07:04:04 Uhr
Goto Top
Hi.

keine Ahnung warum Du das ständig kaputtbaust... (und Dich nicht an die Vorlage von Sid hältst)

:: https://administrator.de/forum/verzeichnis-erstellen-wenn-vorhanden-1-24110067991.html#comment-1012127919830555
:: https://administrator.de/user/siddius/

@echo off &setlocal enabledelayedexpansion 
set ARCHIVNAME=sicherung-%DATE%
set "root=g:\sicherung\hundeshop"  
set "prefix=%ARCHIVNAME%"  
set max=3
set cnt=1
set "folder=%root%\%prefix%"      
:loop
if not exist "!folder!" (    
    md "!folder!"    
    goto :end
) else (
    if !cnt! GTR %max% goto :end
    set "folder=%root%\%prefix%-!cnt!"    
    set /a cnt+=1
    goto :loop
)
:end
pause

Was mich wundert, ist das bei "not exist" ein Verzeichnis erstellt werden soll.
Haja, einfache Abfrage obs den Ordner schon gibt, wenn nicht, erstelle ihn, wenn vorhanden, gehe zum Else (-x anhängen) Fall.
7907292512
7907292512 20.10.2023 aktualisiert um 08:03:01 Uhr
Goto Top
Tja Kopf Tischplatte, es ist Freitag, was sonst ...
Wozu definiere ich wohl Variablen im Kopf wenn die dann einfach ignoriert und wieder alle durch das falsche ersetzt werden , Koppschüttel. Du sollst nur den Inhalt der Variablen in Zeile 2 und 3 anpassen also root und prefix sonst nüscht!!! Und in root und prefix bitte Ordner ohne Backslash am Ende, genau so wie ich es in meinem Skript geschrieben habe!!
8585040390
8585040390 20.10.2023 aktualisiert um 07:58:27 Uhr
Goto Top
Und in root bitte Ordner ohne Backslash am Ende, genau so wie ich es in meinem Skript geschrieben habe!!
Funktioniert aber auch mit ^^ Hab mal'n Echo zwischendurch eingebaut zum debuggen, Pfad wird vernünftig gebaut. Halb so wild. Aber grundsätzlich von der Syntax abzuweichen als Unwissender ist immer bisschen schwierig. Zumal es mich nun auch einige Minuten fürs Debugging gekostet hatte.
7907292512
7907292512 20.10.2023 aktualisiert um 08:07:43 Uhr
Goto Top
Ja, gehen tut das, ist aber unsauber und könnte im weiteren Verlauf der Anpassung zu Fehlern führen. Aber wat soll's die Batchies sollen ihre Matsche halt weiter bis in alle Ewigkeit kritzeln ...

I'm out. 🖖

So long
Sid.
AndreL
AndreL 21.10.2023 aktualisiert um 04:58:25 Uhr
Goto Top
Hallo Profis,
habe das Script zum laufen bekommen.
Vielen Dank an alle, besonders an Sid

Habe noch ein Schönheitsfehler,
wenn ich eine andere Taste als "j" oder "n" drücke, erhalte ich diese Meldung:
FINDSTR: Sie haben eine falsche Taste gedr�ckt kann nicht ge�ffnet werden.
Die Schrift sollte rot sein.
Habe "echo" durch "Call :Farben C "Sie haben eine falsche Taste gedrückt"
echo.&echo." ersetzt.

Habe die Schriftformatierung mehrfach in meinem Script, da funktioniert der Aufruf mit "call"

:auswahl
echo möchten Sie eine neue Sicherheitskopie erstellen? (j / n)
SET /p wahl=
if '%wahl%' == 'n' goto Nein  
if '%wahl%' == 'j' goto Ja  
Call :Farben C "Sie haben eine falsche Taste gedrückt"  
echo.&echo.
Goto auswahl
Habt ihr einen Vorschlag?
Gruss André