Batch Namen einer Datei auslesen und in eine Variable umwandeln

Robmantuto

Ensign
Registriert
Apr. 2008
Beiträge
141
Ich fange einfach mit dem Beispiel an, es ist so am einfachsten.
Ich habe eine Datei: Name.txt
Die liegt auf meiner D-Partition:
D:\Name.txt
Ich möchte eine Batch-Datei erstellen, die eine Variable enthält, diese soll den Namen der Datei beinhalten, aber ohne die Endung. Diese Variable würde ich für weitere Befehle nutzen wollen.
Danke.
 
Vielleicht kannst du es näher erläutern, würde gerne den Sinn dahinter verstehen.

Habe schon.
Die Lösung für mein Beispiel:

set Dateiname=D:\Name.txt
set name=%str:~4,-5%
echo %name%
 
Zuletzt bearbeitet:
set var=D:\Name.txt
FOR %%i IN ("%var%") DO (
ECHO Laufwerk=%%~di
ECHO Pfad=%%~pi
ECHO Name=%%~ni
ECHO Endung=%%~xi
)

Gib in der Eingabeaufforderung "help for" ein und schau dir die Beispiele an.
 
Sorry,

hier das komplette Script ;)

set str=filename.txt
echo.%str%
set str=%str:~0,-4%
echo.%str%

Macht im Endeffekt nichts anderes als die letzten 4 Zeichen zu streichen.

Zum besseren Verständis:

@echo off ##es werden nur Befehle mit "echo" ausgegeben
set str=filename.txt ##schreibt den Dateinamen in die Variable
echo.%str% ##gibt die Variable str aus
set strkurz=%str:~0,-4% ##entfernt die letzten 4 Zeichen und schreibt es in die Variable strkurz
echo.%strkurz% ##gibt die Variable strkurz aus
 
Zuletzt bearbeitet:
Deine Lösung funktioniert leider nicht universell (Endung *.jpg v *.jpeg) und entfernt auch nicht das Laufwerk und den Pfad.
 
Das war ja auch nicht die Anforderung ;)
Das sollte dir dann eher helfen.

@echo off
call :setfile C:\Desktop\fs.jpg
echo %file%
echo %filepath%
echo %filename%
echo %filename_kurz%
goto :eof

:setfile
set file=%~f1
set filepath=%~dp1
set filename=%~nx1
set filename_kurz=%~n1
goto :eof
 
Zuletzt bearbeitet:
Ok, danke, da muss mich erstmal durcharbeiten. Wie ist es, wenn der Name immer anders ist.
Nochmal zu Erläuterung:
Ich erstelle per Batch eine Datei mit einem Namen, nach diesem werde ich gefragt, ich gebe den Namen ein und eine Datei mit diesem Namen wird erstellt. In dem Ordner ist nur diese eine Datei vorhanden. Diesen Namen soll dann meine Variable (wie oben schon beschrieben) beinhalten, die ich für weitere Befehle nutze. Bitte um ein konkretes Beispiel. Die Datei würde ich auch ohne Endung erstellen, das ist nicht relevant, es geht darum, dass man den Namen der Datei übernimmt.
Hier nochmal mein Beispiel:
D:\DerName.txt oder D:\DerName
 
Was hast du denn bisher? Poste mal deinen Code, dann kann man daran vielleicht besser anknüpfen.
 
Code:
For /F %%i in ("D:\Daten /B *.txt") do set Datei=%%~ni
Haut aber irgendwie nicht hin, bekomme als Ausgabe Daten.

Nochmal angepasst:
Code:
For /F %%i in ("D:\Daten\*.txt") do set Datei=%%~ni
Jetzt bekomme ich den Namen angezeigt.
 
Zuletzt bearbeitet:
In Post #9 sagst du noch, dass du den Dateinamen innerhalb des Skripts eingibst. Dann kannst du den einfach weiter verwenden.
Es muss also doch noch mehr vorhanden sein, als diese eine Zeile aus Post #11.
Mit mehr Informationen können wir besser helfen.

Ach ja, und zur besseren Lesbarkeit setze den Batch-Code hier im Forum bitte in Code-Tags:

[code] hier der code [/code]
 
Hi

Wie wärs mit Powershell
Da würds ganz einfach gehen.

Code:
Get-ChildItem | Select-Object -Property basename

mfg

Fritz
 
Ich kann mir nur vorstellen, dass der TE über eine batch eben die Datei in D:\Daten\ erzeugt (evt. über >>) und eine andere batch zu einem viel späteren Zeitpunkt eben diese Datei benötigt, um etwas anderes zu ermitteln.
Durchaus nachvollziehbar, D:\Daten\ muss aber danach wieder leer sein, um Fehler zu vermeiden oder die aktuellste Datei ist immer die erste.

Mit Powershell geht alles besser und sieht schöner aus :) .
 
Meistens versuche ich ja auch mit Powershell solche Skripte zusammenzustellen, leider geht es in diesem Fall nicht, da ich ein Report für eine Gruppenrichtlinie per Skript erstellen lasse und in der Datei der eine "Name" vorkommen soll. Der Report wird über die Batch-Datei zusammengestellt. Und ja, ich weiß, dass man in PS auch die Option hat, leider arbeite ich mit Win 7 und das GroupPolicy Module ist in "meinem" Powershell leider nicht dabei, deshalb muss ich mit Batch-Dateien arbeiten.
 
Ich nehme mal an du hast einen Domäncontroller von den du die Gruppenrcihtlinie bearbeiten willst. Wenn das so ist dann kann du dir die RSAT Tools installieren dann hast du das Group Policy Modul in deiner Powershell.
Geht aber nur wenn der Server 2008 R2 ist.
 
Der Rechner ist dann bereits aus der Domäne raus und wird dann lokal eingerichtet und wie gesagt, es ist ein Win7-Rechner.
 
Hallo,

Ich hätte die gleiche Frage. Aber weil ich keine Lust habe alles zu lesen und zu kombinieren, hier meine detaillierte Frage:

Ich möchte alle Dateien des Ordners %homepath%/desktop/Database-Files auflisten, d. h. die Dateinamen in einer Liste aufzählen. Aber ohne Endung, diese ist .database .

Kann mir jemand bitte sagen, wie das geht? Danke ;)
 
Zurück
Oben