antum-frischling
Goto Top

Substring ? Batch

Guten Tag liebe Programmierer,

ich habe ein kleines Problem und zwar ich möchte von einem Datei die ersten 11 Zeichen übernehmen und wonaders hinzufügen

zb. 2014-03-24-HalloWelt.txt soll in OrdnerA verschoben werden und zu 2014-03-24-erledigt.txt umbenannt werden. Wie sieht so ein Code aus?

Hab hier mal ein Beispiel, wie es grundsätzlich geht, aber ich weiss nicht wie ich den Ordner Name angeben könnte. Man könnte es eventuell als ein variablen festlegen das der Pfad 2014-03-24-HalloWelt.txt machen, weil der Datei-Namen sich immer ändern wird, aber ich wüsste nicht wie sowas aussieht,

SET _test=123456789abcdef0

SET _result=%_test:~0,5%
ECHO %_result% =12345

komme einfach nicht weiter.

Kann mir da weiter helfen bitte face-smile

Content-Key: 233505

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

Printed on: May 8, 2024 at 13:05 o'clock

Member: Endoro
Endoro Mar 24, 2014 at 17:14:03 (UTC)
Goto Top
Hey, zwei Beispiele:
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "FName=2014-03-24-HalloWelt.txt"  
SET "N1Name=%FName:~0,11%erledigt.txt"  
ECHO %N1Name%
FOR /f "tokens=1-3delims=-" %%a IN ("%FName%") DO SET "N2Name=%%a-%%b-%%c-erledigt.txt"  
ECHO %N2Name%
Für Hilfe siehe set /? und for /?.
Gruss Endoro.
Member: Antum-frischling
Antum-frischling Mar 25, 2014 updated at 10:21:10 (UTC)
Goto Top
Vielen dank für deine Hilfe, soweit klappt es wunderbar, aber ich müsste es so um ändern, dass der die Datei Name verändert, es wird nur auf der CMD angezeigt.

die erste variante ist ein feste variable oder ?
von daher wäre die 2 möglichkeit am besten, weil der name sich immer ändern wird (datum)

dafür kann ich doch ren benutzten oder sieht dieser Befehl wieder anderes face-sad
Member: Endoro
Endoro Mar 25, 2014 at 11:57:09 (UTC)
Goto Top
Hey,
ja REN ist richtig:
@ECHO OFF &SETLOCAL disableDelayedExpansion
CD /c X:\My Folder
FOR /f "delims=" %%x IN ('DIR /b /a-d *-*-*-*.txt') DO (  
	FOR /f "tokens=1-3delims=-" %%a IN ("%%~x") DO (  
		REN "%%~x" "%%a-%%b-%%c-erledigt.txt"  
	)
)
Gruss Endoro.
Member: Antum-frischling
Antum-frischling Mar 25, 2014 updated at 15:20:35 (UTC)
Goto Top
Vielen dank Endoro,

ich hätte noch eine letzte Frage, ich habe jetzt diese einfache Code genommen und kann ich bei diesem Code auch den Pfad angeben. zb

nehme den Pfad von D:\User\Guenni\OrdnerA\*.txt

hab den * genommen, weil die Zeichen vom Datum immer gleich lang sind und er soll einfach schauen, dass er einfach das mit dem txt-datei nehmen soll.

das wäre meine aktuelle Code
SET FName=2014-03-24-HalloWelt.txt
SET N1Name=%FName:~0,11%erledigt.txt

ren D:\Users\Guenni\Desktop\OrdnerA\2014-03-24-HalloWelt %N1Name%


und ich möchte sowas wie

SET FName=D:\Users\Guenni\Desktop\OrdnerA\*-HalloWelt.txt =>dort könnte morgen 2014-03-25 drin stehen oder eine anderes Datum
SET N1Name=%FName:~0,11%erledigt.txt

ren D:\Users\Guenni\Desktop\OrdnerA\2014-03-24-HalloWelt %N1Name%

wenn sowas nicht geht,dann würde ich auch eine andere alternative nehmen

Ich habe mal dein Code mal genommen und mit meine Sachen hinzugefügt


@echo OFF &SETLOCAL disableDelayedExpansion

cd /c D:\Users\Guenni\Desktop\Hey\

FOR /f "delims=" %%x IN ('DIR /b /a-d *-*-*-*.txt') DO (

FOR /f "tokens=1-3delims=-" %%a IN ("%%~x") DO (

REN "%%~x" "%%a-%%b-%%c-erledigt.txt"
)
)

pause

ich bin zu doof für batch :S irgendwie läuft da nichts :S
Member: Endoro
Endoro Mar 25, 2014 at 16:10:10 (UTC)
Goto Top
In der ersten For-Schleife werden mit dem Muster *-*-*-*.txt alle Dateien bearbeitet, die mindestens drei Striche und die Endung .txt haben. In der zweiten Schleife wird der (immer andere) Name ausenander genommen und anschliessend wieder zusammengesetzt und um "erledigt.txt" ergänzt. Du kannst die Dateien umbenannt auch gleich in einen Ordner verschieben:
@ECHO OFF &SETLOCAL disableDelayedExpansion
CD /c X:\My Folder
FOR /f "delims=" %%x IN ('DIR /b /a-d *-*-*-*.txt') DO (  
	FOR /f "tokens=1-3delims=-" %%a IN ("%%~x") DO (  
		MOVE "%%~x" "Y:\FOLDER\%%a-%%b-%%c-erledigt.txt"  
	)
)
Gruss Endoro.