Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Kann Batchdatei Dateinamen einlesen und ändern?

Mitglied: Kanten

Kanten (Level 1) - Jetzt verbinden

22.06.2005, aktualisiert 31.08.2005, 18589 Aufrufe, 23 Kommentare

Hallo zusammen,

ich möchte mittels einer Batchdatei mehrere Dateien umbenennen.
Dazu sollte die Batchdatei die Namen einlesen und nach einem bestimmten Muster wieder ausgeben.
Ist dies überhaupt möglich?

Kanten
Mitglied: Atomix
22.06.2005 um 16:31 Uhr
Kommt drauf an.
Eigentlich ist es möglich! Brauchst nur sagen wie du dir das genau vorstellst.

MFG
Atomix
Bitte warten ..
Mitglied: Biber
22.06.2005 um 16:40 Uhr
Moin Kanten,

schließe mich meinem Vorredner an - wenn Du schnell sagst, wie die Umbenenn-Mimik aussehen soll, sind wir bis zehn vor 5 durch mit dem Thread.

Zeit läuft... mach hinne


Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: Kanten
22.06.2005 um 16:57 Uhr
Hui, dann leg ich mal los:

Sagen wir mal die Datei sieht so aus:
Dies ist ein langer Text - Dies ist auch ein langer Text.txt

Das "-" ist als Trenner in zwei Abschnitte gedacht.
Absatz 1: "Die ist ein langer Text"
Absatz 2: "Dies ist auch ein langer Text"

Jeder Abschnitt darf nur 16 Zeichen lang sein.
Sollte einer der Abschnitt unter 16 Zeichen lang sein, werden die fehlenden stellen mit Leerschritten aufgefüllt.
Sollte er über 16 Zeichen lang sein so sollte nach 15 Zeichen schluss sein und das 16 Zeichen ein "." darstellen.
Das "-" müsste aus dem Dateinamen verschwinden.

Also etwa in der Form : Dies ist ein la.Dies ist auch e..txt

Bei der "kurzen" Form von: text - text.txt

-> text567890123456text567890123456.txt
Die Zahlen sollen nur die Leerstellen demonstrieren!

Kann es euch nicht verdenken wenn ihr auf so ne komische Sache keine Lust habt.
Für ein paar Tips in die richtige Richtung wäre ich aber schon dankbar!

Kanten
Bitte warten ..
Mitglied: Biber
22.06.2005 um 20:06 Uhr
Also, Kanten,

Du hörst es wahrscheinlich nicht gerne bzw. weißt es schon ein paar Tage länger,
Eure Endanwender/Anforderer haben echt ne Panne... *Kopfschüttel

Machbar ist ja alles, aber diese Sachzwänge würde ich schon gern kennenlernen, die zu diesen Dateinamen geführt haben.

Bei dem Batch gibt es (außer der Nicht-Nachvollziehbarkeit dieses Spaghetti-Codes *gg) noch drei Restriktionen:

1) so wie es ist, muss das Batchelchen in dem Verzeichnis mit Deinen *.txt-Dateien laufen
2) die *.txt-Dateien in diesem Verzeichnis umbenennen? ich würde die lieber kopieren.. entkommentier Dir die entsprechende Lieblings-Echozeile unten
3) Fest verdrahtet ist die Annahme, dass in den Ursprungsdateien der Trenner GENAU EIN "-" ist UND ein wegzuschmeißendes Leerzeichen IMMER folgt.
Sollte das nicht so sein, bitte ändern.

Mit Deinen beiden Beispiel-Dateinamen klappt es jedenfalls, aber weiter teste ich nicht, sonst kommt mir irgendein Crack mit einem *.vbs-Skript zuvor.
Bin im Biergarten bei den anderen.

Batch folgt..

Hope It Helps

Frank /der Biber aus Bremen



::-- Kantenspecial.bat
@echo off

::set DEBUGMYBATCHES=42
setlocal
::Set My16Spaces="1234567890123456"
Set My16Spaces=" "
::Bitte My16Spaces mit 16 SPACES auffüllen, werden hier nicht angezeigt auf dieser Seite!
::
:: .. noch ne Anmerkung: ob der "dir"-Befehl mit der Maske "*-*.txt" unter allen DOSen klappt, weiß niemand..
for /F "delims=- tokens=1,*" %%i in ('dir /b *-*.txt') do call :loop "%%i" "%%j" "%%i-%%j"
goto FireAbend

:loop
set Part1=%1
set part1=%part1:~0,-1%%My16Spaces:~1,16%.
if "%Part1:~16,2%" GTR " " (set Part1=%Part1:~1,15%.) else set Part1=%Part1:~1,16%

set Part2=%2
set part2=%part2:~1,-5%%My16Spaces:~1,16%.
if "%Part2:~16,2%" GTR " " (set Part2=%Part2:~1,15%.) else set Part2=%Part2:~1,16%

echo "123456789012345.1234567890123456.txt" (Nur zum Testen)
echo "%part1%%part2%.txt"
echo Und Nun?? Rename oder Copy??:
echo entweder Ren %3 "%part1%%part2%.txt"
echo oder ein Copy %3 "\anderesDir\%part1%%part2%.txt" && del %3

goto :eof

:FireAbend
Endlocal
:: -- Ende Kantenspecial.bat
Bitte warten ..
Mitglied: gemini
22.06.2005 um 20:19 Uhr
Hallo Kanten,
mit einem Batch kann ich dir nicht dienen.
Wenn es auch vbs sein darf...?

'<<<<<<<bef>>>>>>>
' RenFile.vbs
'''''''''''''''''''''''''''''''''''''
Option Explicit

Dim objFSO, objFld, objFiles, objFile
Dim strFileSrc, strFileDst, strExt, strPath
Dim arrFileName
Dim i, j

strPath = "D:\Test\"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFld = objFSO.GetFolder(strPath)
Set objFiles = objFld.Files

For Each objFile in objFiles
strFileSrc = objFile.Name

strExt = Right(strFileSrc, 4)
strFileSrc = Left(strFileSrc,Len(strFileSrc) - 4)
arrFileName = Split(strFileSrc, " - ")

  For i = 0 To 1
    If Len(Trim(arrFileName(i))) > 16 Then
      If i = 0 Then
        arrFileName(i) = Left(arrFileName(i), 15) & "."
      Else
        arrFileName(i) = Left(arrFileName(i), 16)
      End If
    ElseIf Len(Trim(arrFileName(i))) = 16 Then
      arrFileName(i) = arrFileName(i)
    ElseIf Len(Trim(arrFileName(i))) < 16 Then
      For j = 1 To 16 - Len(Trim(arrFileName(i)))
        arrFileName(i) = arrFileName(i) & " "
      Next
    End If
  Next
strFileDst = arrFileName(0) & arrFileName(1) & strExt
objFSO.MoveFile strPath & strFileSrc & strExt, strPath & strFileDst
Next
'<<<<<<<oef>>>>>>>

Die Variable strPath MUSS mit einen Backslash abgeschlossen sein.
Ich hab das Script ein paar mal durchlaufen lassen, hat funktioniert.
Ansonsten ist es ungestestet, ohne Fehlerbehandlung und nicht optimiert.

So, nun zieht es auch mich in den Biergarten, wo die Kollegen wahrscheinlich schon lange sind

Prost
Bitte warten ..
Mitglied: Kanten
23.06.2005 um 05:58 Uhr
Vielen, Vielen Dank Frank!

Du hast mich echt gerettet.
Ich hab es mehrmals ausprobiert, und es läuft einwandfrei!

Das Geheimnis hinter diesem Aufwand ist ein 2 zeiliges LCD Display das in einer Zeile 16 Zeichen darstellen kann.
Nicht schön, aber selten!

Vielen Dank nocheinmal für das Skript und trink für mich ein Bier mit !

MFG
Jens
Bitte warten ..
Mitglied: Kanten
23.06.2005 um 06:02 Uhr
Auch dir ein grosses Dankeschön !

Obwohl das Skript von Biber super funktioniert, halte mich mir deine Variante aber noch in der Hinterhand.
Es war also nicht umsonst !

MFG
Jens
Bitte warten ..
Mitglied: Maximilianus
02.08.2005 um 11:23 Uhr
Also ich habe ein ähnlich gelagertes Problem, aber es ist mir noch nicht so richtig gelungen, das Beispiel umzuschreiben:

In einem Verzeichnis liegen beliebige Dateien, also mit unterschiedlichen Dateiendungen. Alle Dateien beginnen aber mit "temp", z.B.
tempMauerblümchen.mp3
tempAnleitung.doc
tempRechnung-2005-04-07.xls

Das Batch-Skript soll nun alle Dateien im verzeichnis umbenennen, indem das "temp" entfernt wird. Die dateien sollen nach dem Batch also
Mauerblümchen.mp3
Anleitung.doc
Rechnung-2005-04-07.xls
heißen.

Wäre für einen Tip dankbar.
Das ganze unter Windows 2000
Maximilianus
Bitte warten ..
Mitglied: Biber
02.08.2005 um 11:39 Uhr
Moin, Maxi...

Eine Strategie könnte sein:

.. Dateinamen (ohne Pfad) in Variable %Dateiname% einlesen
.. Set DateinamenOhneTemp=%Dateiname:~4%
(also die konstant lange Zeichenfolge "temp" abschneiden.)
Dann ein Rename wie in der Skizze oben.

Wenn es nicht reicht, poste von deinem Batch, was an Gerüst da ist, dann machen wir den Rest hier.

Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: gemini
02.08.2005 um 11:54 Uhr
Schau dir doch mal das Progamm hier an, für deine Anforderungen dürfte das genau passen.
http://it-falke.com/software/renamefiles/de_description.php
Bitte warten ..
Mitglied: Maximilianus
02.08.2005 um 12:47 Uhr
.. Dateinamen (ohne Pfad) in Variable
%Dateiname% einlesen
.. Set DateinamenOhneTemp=%Dateiname:~4%
(also die konstant lange Zeichenfolge
"temp" abschneiden.)
Dann ein Rename wie in der Skizze oben.

Nachdem ich mich noch etwas mit der Syntax rumgeschlagen habe, sieht es so aus, als ob dieses funktionieren würde:

setlocal
FOR %%i in (*.*) do call :loop "%%i"

:loop
set part1=%1
set part1=%part1:~5%
@echo %1
@echo %part1%
Ren %1 "%part1%"

goto :eof

:FireAbend
Endlocal

Maximilianus
Bitte warten ..
Mitglied: Maximilianus
02.08.2005 um 12:57 Uhr
Schau dir doch mal das Progamm hier an,
für deine Anforderungen dürfte das
genau passen.
http://it-falke.com/software/renamefiles/de_description.php

Nein, das ist ein Programm und kein Batch-Skript. Ich suche aber ein Batch-Skript.

Danke,
Maximilianus
Bitte warten ..
Mitglied: Biber
02.08.2005 um 13:15 Uhr
War schon fast richtig...
In der :loop-Schleife ist die übergebene Variable %%i der Parameter %1


for %%i in (*.*) do call :loop "%%i"
goto ende
:loop
Set DateinameAlt=%~nx1
Set DateinameNeu=%DateinameAlt:~5,-1%
::5 Zeichen weg, weil jetzt der String-Inhalt von %DateiNameAlt% mit ["temp] beginnt; -1 = letztes " weg
ren %1 %Dateiname.neu .............(oder statt %1 auch %~f1 oder ähnlich)
goto :eof
:ende

Biber
Bitte warten ..
Mitglied: Maximilianus
02.08.2005 um 13:29 Uhr
War schon fast richtig...
In der :loop-Schleife ist die
übergebene Variable %%i der Parameter
%1


for %%i in (*.*) do call :loop
"%%i"
goto ende
:loop
Set DateinameAlt=%~nx1
Set DateinameNeu=%DateinameAlt:~5,1%
::5 Zeichen weg, weil jetzt der
Var-InhalteString mit ["temp] beginnt;
-1 = letztes " weg
ren %1 %Dateiname.neu .............(oder
statt %1 auch %~f1 oder ähnlich)
goto :eof
:ende

Biber

Danke, so wie oben hat es auch funktioniert, aber egal.

Zweite Frage: Wie kann ich die ersten 4 Zeichen des Dateinamens auslesen?

Ich will jetzt nämlich noch eine Abfrage machen, ob der Dateiname überhaupt mit "temp" anfängt.

Antwort:
set prefix=%part1:~1,+4%

Gruß,
Maximilianus, ebenfalls in Bremen
Bitte warten ..
Mitglied: Biber
02.08.2005 um 14:47 Uhr
Anmerkung: Statt zu prüfen, kannst du auch den Batch nur auf die "temp*.*"-Dateien losjagen:
statt "for %%i in (*.*) " nur "for %%i in (temp*.*)"

Biber
Bitte warten ..
Mitglied: Maximilianus
02.08.2005 um 14:48 Uhr
Das Skript sollte bei Dateien, deren Name mit "temp" beginnt, diesen Anfang löschen. Dateien ohne vorangesetztes "temp" sollen unverändert bleiben.
So sieht dann der vollständige Quelltext aus:

setlocal
FOR %%i in (temp*.*) do call :loop "%%i"
goto FireAbend

:loop
set part1=%1
set prefix=%part1:~1,+4%
set part1=%part1:~5,-1%
@echo %1
@echo %part1%
ren %1 "%part1%"

goto :eof

:FireAbend
Endlocal

Danke für die Mithilfe,
Maximilianus
Bitte warten ..
Mitglied: Maximilianus
02.08.2005 um 14:59 Uhr
Anmerkung: Statt zu prüfen, kannst du auch den Batch nur auf die
"temp*.*"-Dateien losjagen: statt "for %%i in (*.*) " nur
"for %%i in (temp*.*)"
Biber

Sowas bescheuertes! So hatte ich auch angefangen mit dem Skript und dann flog es irgendwann raus.

Danke für den Hinweis, ist natürlich viel eleganter.

Maximilianus
Bitte warten ..
Mitglied: Biber
02.08.2005 um 15:06 Uhr
@61595
Aber so haben es nun auch ein paar Mitleser verstanden mit den kryptischen %var:~1,-3%-Möglichkeiten, und dafür ist ja dieses Forum da.

Und endlich können wir auch die eigentliche Thread-Frage beantworten: Ja, Batchdateien können schon Dateinamen ändern... quod erat ja schließlich auch nur demonstrandum.
Bitte warten ..
Mitglied: Gibbon
31.08.2005 um 14:31 Uhr
Hallo,

ich habe ein ähnliches Problem, bin aber aus euren obigen Ausführungen nicht schlau geworden.
In einem Verzeichnis befinden sich mehrere Dateien mit unterschiedlichen Dateinamen und -endungen. Ich bräuchte eine batch-Datei, die an den bestehenden Dateinamen jeder einzelnen Datei das aktuelle Datum und die aktuelle Uhrzeit anhängt.
z.B.: testdatei.txt --> testdatei_20050831_h14m29s54.txt

Schon mal danke,

Gibbon
Bitte warten ..
Mitglied: Biber
31.08.2005 um 14:45 Uhr
Moin Gibbon,
Dein Problem läuft grade seit heute unter
https://www.administrator.de/index.php?mod=content_detail&action=det ...

... zumindest fast das gleiche. Lies bitte da mit, wenn Du dann meinst, Dein Prob ist ganz was anderes, mach bitte einen neuen Thread auf.
Dieser hier ist tot - den kennt keiner mehr außer mir *gg
Gibt auch noch ein paar ähnliche Fragen (mit Lösungsvorschlägen). Such mal im Forum nach "Datei Datum umbenennen Uhrzeit Zähler Batch" oder so.

Gruß
Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: Gibbon
31.08.2005 um 14:55 Uhr
Danke für die schnelle Antwort. Mittlerweile konnte ich das Problem selber lösen.

for /F "tokens=1,2,3 delims=. " %%a in ('date /t') do set TIMESTAMP=%%c%%b%%a
for /F "tokens=1,2,3,4 delims=:, " %%a in ('echo %TIME%') do set TIMESTAMP=%TIMESTAMP%_h%%am%%bs%%cms%%d
for /F "delims=. tokens=1,2" %%i in ('dir updateFiles\ /b') do ren updateFiles\%%i.%%j %%i_%TIMESTAMP%.%%j
Bitte warten ..
Mitglied: Biber
31.08.2005 um 15:14 Uhr
Auch nicht schlecht, gibbon,

poste Doch mal bitte Deine Variante noch unter:
https://www.administrator.de/index.php?mod=content_detail&action=det ...

.. da hatte ich grad zeitgleich mit Dir getippt.

Und Deine Lösung ist auch schön lesbar.
Gruß
Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: Gibbon
31.08.2005 um 15:33 Uhr
Schon erledigt. Tschö mit ö.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Variabler Dateiname innerhalb einer Batchdatei

gelöst Frage von SpikeeeBatch & Shell5 Kommentare

Hallo Liebe Gemeinde! Vielleicht eine relativ simpel zu lösende Aufgabe, jedoch tu ich mich da grad ein wenig schwer, ...

Batch & Shell

Wildcard im Dateinamen möglich bei Batchdatei?

Frage von imebroBatch & Shell3 Kommentare

Hallo, ich habe zwar hier ein paar Fragen zu Wildcards gefunden. Aber noch nicht so genau meine Lösung. Ich ...

Batch & Shell

Dateiname über Batch ändern

gelöst Frage von c64b311ee9Batch & Shell6 Kommentare

Hallo liebe Community, folgendes Problem!: Ich habe einen Ordner mit 500 PDF Dateien. Diese sind nach folgendem Schema aufgebaut. ...

Batch & Shell

Finden von (fast) gleichen Dateinamen, Ändern von Dateinamen

gelöst Frage von internet2107Batch & Shell8 Kommentare

Ich habe leider mal wieder eine etwas knifflige Sache. Aktuell suche ich in Verzeichnissen nach Dateien mit gleichen Namen ...

Neue Wissensbeiträge
Exchange Server
Exchange - Fehler mit 2018-07 Sicherheitsupdate
Tipp von ArnoNymous vor 7 StundenExchange Server3 Kommentare

Hallo, es gibt mal wieder Freude mit den MS-Updates. KB4338814 führt dazu, dass der Exchange keine Mails mehr zustellt. ...

Suche Projektpartner

PC Recycling Projekte mit Flüchtlingen und Kids suchen Materialspenden und Mitmacher!

Erfahrungsbericht von NettePCyclePiraten vor 1 TagSuche Projektpartner7 Kommentare

Hallöchen liebe Kollegen, ich betreue zwei PC-Gruppen im Raum Dortmund: "Ne#e PCycle Pir@ten" & "PCschr@uber Br@mbauer" Wir sind eine ...

iOS
IOS 12.2 beta und OpenVPN iPad und iPhone
Erfahrungsbericht von magicteddy vor 1 TagiOS

Moin, kleiner Hinweis an die experimentierfreudigen unter Euch: Bei der aktuellen beta gibt es ein Problem im Zusammenspiel zwischen ...

Vmware
VMware Tools 10.3 verfügbar
Information von sabines vor 1 TagVmware

Eine Sicherheitslücke wird mit den Tools der Version 10.3 geschlossen, die Tools müssen auf jeder VM aktualisiert werden. Näheres ...

Heiß diskutierte Inhalte
Microsoft
Dringend: Nach neustart kein zugriff mehr per RDP möglich - vermutlich wegen gelöschter SID in AD
gelöst Frage von sven784230Microsoft30 Kommentare

Hallo zusammen, gerade hat ein Server 2012 (terminalserver + Active directory) einen geplanten Neustart durchgeführt, wenn ich mich jetzt ...

Windows Netzwerk
Netzwerk einrichten - wie mache ich es richtig?
Frage von gintonikWindows Netzwerk19 Kommentare

Hallo, ich bin neu hier und erhoffe mir hier ein paar Antworten für meine Umsetzung zu erhalten. Kurz zu ...

Microsoft Office
Druckdatum nur auf ausgedrucktem Dokument anzeigen
gelöst Frage von eichi18Microsoft Office16 Kommentare

Hallo zusammen Ich versuche in einem Word Dokument das Druckdatum nur auf dem eigentlichen Ausdruck auszugeben und am Bildschirm ...

CPU, RAM, Mainboards
4x 2 GB DDR2 1066 gesucht
gelöst Frage von Windows10GegnerCPU, RAM, Mainboards16 Kommentare

Hallo, ich plane den RAM meines Rechners aufzurüsten. Motherboard: Gigabyte X48 DS5 Der FSB steht bei 259, daher soll ...