Kopieren von Daten und anschließendes Umbenennen

dinoldo

Cadet 4th Year
Registriert
Juni 2017
Beiträge
104
Hallo Leute,

ich habe dieses CMD-Script, für das Anlegen der Benutzerprofiel in einem Programm.
Das Verzeichnis NEU gilt beim Kopieren als sozusagen Vorlageverzeichnis.
1587907961766.png


Ich habe zwei Variante (1 = Windows Benutzername und 2=Benutzername eingeben) in der CMD-Datei zur Auswahl.
1587908015719.png

Mit dem Script wird vorher das Zeilverzeichnis gelöscht, dann das Zeilverzeichnis mit Benutzername angelegt, danach die Dateien und unterverzeichnisse von "NEU" kopiert und umbenannt. Soweit in Ordnung.

Das Problem ist nur, wenn der Benutzername beispielsweise von Namen her kürzer ist als "NEU" dann wewrden die Dateien nach dem Kopieren nicht richtig umbenannt. Bsp. ich wähle Variante 2 und gebe dort KIT ein. Dann wird aus NEU nur KITU_ anstatt KIT

1587908058748.png

Woran liegt das bitte?

Code:
@echo off

setlocal enabledelayedexpansion
color 17
chcp 65001
cls

SET Script_Path=%~dp0
echo %Script_Path%
SET teil=%Script_Path:~0,-16%
echo %teil%

echo ---------------------------------------------------------------------------
echo Profil erstellen
echo ---------------------------------------------------------------------------
echo.
echo [1] Entspricht Windows Benutzername
echo [2] Benutzername eingeben
echo.

set frage=2
set /P frage=Bitte die Nummer eingeben:

IF %frage% == 1 (
    goto option1
)
IF %frage% == 2 (
    set /P struser=Bitte den Name eingeben:
    goto option2
)

:option1
        set struser=%username%
        goto weiter
:option2
        goto weiter
endlocal

:weiter
        REM löscht das Verzeichnis auf jeden Fall falls Backup schon existiert
        if exist "%teil%\user_config\%struser%" (
            rd "%teil%\user_config\%struser%" /S /Q
        )
        REM löscht das Verzeichnis auf jeden Fall falls Backup schon existiert
        if exist "%teil%\user_workspace\%struser%" (
            rd "%teil%\user_workspace\%struser%" /S /Q
        )
        REM Kopieren user_config von der Vorlage _NEU_
        xcopy "%teil%\user_config\_NEU_" "%teil%\user_config\%struser%" /y /i /E
        REM Umbenennen aller Dateien die _NEU_ beginnen
        for /r "%teil%\user_config\%struser%" %%a in (_NEU_*.*) do ren "%%a" "%struser%*.*"
        REM Kopieren user_workspace von der Vorlage _NEU_
        xcopy "%teil%\user_workspace\_NEU_" "%teil%\user_workspace\%struser%" /y /i /E
        REM Umbenennen aller Dateien die _NEU_ beginnen
        for /r "%teil%\user_workspace\%struser%" %%a in (_NEU_*.*) do ren "%%a" "%struser%*.*"
        REM Dateiexplorer an der Stelle öffnen
        %SYSTEMROOT%\EXPLORER.EXE "%teil%\user_config"

:exit1
 
Rename macht genau das, was Du ihm sagst ... Dein Problem ist das "*" zwischen "%struser%" und ".". Das sorgt dafür, das beliebig viele Zeichen vom originalen Dateinamen vor dem "." bestehen bleiben.

Also einfach entfernen ...
Code:
for /r "%teil%\user_config\%struser%" %%a in (_NEU_*.*) do ren "%%a" "%struser%.*"
 
Hallo Andreas,

vielen Dank! Jetzt funktioniert es.

Gruß,
Dino
 
Zurück
Oben