[gelöst] Batch | Ordner erstellen wenn er existiert umbenennen.

Palladin007

assimiliert
Ich habe ein paar Problemchen mit diesem Programmteil:


Code:
setlocal EnableDelayedExpansion
setlocal ENABLEEXTENSIONS

[Anfang von dem Programm]
[%pfad% ist schon definiert]

set /p name=

set name> nul
if errorlevel 1 set name=noName
if not exist %pfad%\projekts\%name% goto :mkdir

set exist=1
:exist
if not exist "%pfad%\projekts\%name% [%exist%]" goto :mkdir
set /a exist+=1
goto exist

:mkdir

[Ende von dem Programm]

Das soll die Möglichkeit bieten, einen Ordner zu erstellen. Wenn man keinen Namen eingibt, wird er einfach noName genannt. Das funktioniert auch wunderbar. Wenn der Ordner noName aber schon existiert, dann soll ein Ordner erstellt werden, bei dem hinten noch eine Zahl dran hängt, sodass der Name wieder nicht existiert.
Und genau das funktioniert nicht.

Den Fehler habe ich nicht gefunden, ich hoffe, ihr könnt mir da helfen.
 
Also dann:

Zuerst würde ich mal
Code:
set name> nul
if errorlevel 1 set name=noName
durch ein
Code:
If not defined name set name=noName
ersetzen. Is einfach schöner.

Zu deinem Problem:
Hier hast du mal einen (funktionsfähigen, getesteten) code zum ansehen...
Code:
@echo off

set pfad=D:\Desktop
set name=100MSDCF

If exist %pfad%\%name% (
	goto mkdir
) else (
	md %pfad%\%name%
	set fullpath=%pfad%\%name%
)
echo Sollte nicht zu sehen sein.


:mkdir
for /L %%i in (1,1,100) do (
	if not exist "%pfad%\%name% (%%i)" (
		md "%pfad%\%name% (%%i)"
		set fullpath="%pfad%\%name% (%%i)"
		goto weiter
	)
)
:weiter
echo Der neue Pfad lautet: %fullpath%
echo.
pause
 
Den ersten Teil hab ich auch gemacht, aber dafür musste ich erst mal die Befehlserweiterung aktivieren.
Hatte vergessen, dass ich das noch nicht hatte


Deinen Code werd ich mir mal ansehen und einbauen.

Erst mal danke^^


Hatte selber was anderes geschrieben, was diese eigenartigen Fehler hatte:

1.) Es hat Ordner gefunden, die gar nicht existieren, denn es wusste, dass die angeblich schon existieren. Wenn ich nachgeschaut habe, war da nix.
2.) Wenn ich das Programm mit call von einem anderen Programm aus gestartet habe, ging der Zähler auf einmal nicht mehr^^

Werd das später mal posten^^


Edit:
Muss das md aber mit mkdir austauschen^^
Dein Code würde bei mir nicht gehen, da das ganze noch ein bisschen komplizierter ist.
Ist aber ne interessante Herangehensweise
 
Muss das md aber mit mkdir austauschen^^
Warum?


Zu deinem Code:
Ist etwas schwer zu sagen was da nicht stimmt da der code nicht lauffähig ist.

Btw: Meine Lösung kann man auch noch etwas eleganter gestalten.
Sprungmarken können nämlich in etwa wie funktionen genutzt werden.

Code:
@echo off

set pfad=D:\Desktop
set name=100MSDCF

call :makedir %pfad%\%name%
echo Der neue Pfad lautet: %fullpath%
echo.
pause
exit

:makedir
If not exist %1 (
	md %1
	set fullpath=%1
	goto :eof
)
for /L %%i in (1,1,100) do (
	if not exist "%1 (%%i)" (
		md "%1 (%%i)"
		set fullpath="%1 (%%i)"
		goto :eof
	)
)

Is sogar noch eleganter, da man sich nicht den Wolf springt...

PS: Mein Code ist im prinzip wie deiner, nur dass ich statt einer pseudo-schleife eine vorgegebene verwende...
>> Siehe: Windows-Hilfe "Befehlszeilenreferenz von A-Z" -> "for"
 
Deine Schleife ist aber begrenzt^^

Allerdings kann man das dann auch erweitern und wenn dann bei 100 angekommen ist, wird die 100 mal 10 gerechnet oder so


Auf jeden Fall werd ich mir das mal anschauen


Und mkdir brauche ich, weil auch mehrere Unterordner erstellt werden sollen
 
Hab jetzt einfach 1000 eingefügt xD


Nur für den Fall^^ Soll ja nicht nur für mich sein, weil das dann am Ende hier posten.
Hoffe, das ihr damit was anfangen könnt, aber ich denke schon.




Was deinen Code angeht:

Danke, hab den eingebaut und dabei auch kapiert, warum du nur md da stehen hattest^^
Zumindest funktioniert es jetzt einwandfrei und ich hab den Programmteil endlich fertig.
 
Oben