Vergleich der ersten 8 Stellen zweier Dateinamen in 2 verschiedenen Ordnern.
Hallo zusammen,
ich schreibe gerade an einer Batch, die folgendes abarbeiten soll:
Szenario - zwei Verzeichnisse, Arbeitsverzeichnis (Dir2) und Zielverzeichnis (Dir1). Im Arbeitsverzeichnis liegen diverse Dateien (*.doc, *.xls, *.xlsm) aus welchen 1 Dokument (PDF) erzeugt wird, welches in das Zielverzeichnis verschoben wird.
Gleichnamige Dateien müssen gelöscht werden, was auch geschieht. Ein Dateityp hat leider eine etwas andere Namenskonvention wo nur die ersten 8 Zeichen übereinstimmen, nicht der ganze Dateiname und hier liegt mein Problem.
Beispiel:
01-01111_17-03-2011.pdf (im Zielordner) Vergleichsname
01-01111_17-03-2011.doc (im Quellordner, wird auch gelöscht)
01-01111-01.xlsm (im Quellordner, soll auch gelöscht werden,) davon gibt es evtl. mehrere, welche an den letzten beiden Stellen hochgezählt werden. Eben das Problem.
und hier mein Ansatz:
ist es möglich bei diesem Ansatz zu bleiben? Identische Dateien werden ja schon gelöscht.
bin für jeden Hinweis und Tipp dankbar..
Gruß, Wuggale..
ich schreibe gerade an einer Batch, die folgendes abarbeiten soll:
Szenario - zwei Verzeichnisse, Arbeitsverzeichnis (Dir2) und Zielverzeichnis (Dir1). Im Arbeitsverzeichnis liegen diverse Dateien (*.doc, *.xls, *.xlsm) aus welchen 1 Dokument (PDF) erzeugt wird, welches in das Zielverzeichnis verschoben wird.
Gleichnamige Dateien müssen gelöscht werden, was auch geschieht. Ein Dateityp hat leider eine etwas andere Namenskonvention wo nur die ersten 8 Zeichen übereinstimmen, nicht der ganze Dateiname und hier liegt mein Problem.
Beispiel:
01-01111_17-03-2011.pdf (im Zielordner) Vergleichsname
01-01111_17-03-2011.doc (im Quellordner, wird auch gelöscht)
01-01111-01.xlsm (im Quellordner, soll auch gelöscht werden,) davon gibt es evtl. mehrere, welche an den letzten beiden Stellen hochgezählt werden. Eben das Problem.
und hier mein Ansatz:
@echo off & setlocal EnableDelayedExpansion
Set Dir1=X:\Ziel
Set Dir2=X:\Ablage1
set EXT1=pdf
set EXT2=doc
set EXT3=xlsm
set EXT4=xls
FOR /F "delims=" %%i in ('dir /b /s "%Dir1%\*.%EXT1%"') do if exist "%Dir2%\%%~ni.%EXT2%" del "%Dir2%\%%~ni.%ext2%" (
FOR /F "delims=" %%i in ('dir /b /s "%Dir1%\*.%EXT1%"') do if exist "%Dir2%\%%~ni.%EXT3%" del "%Dir2%\%%~ni.%ext3%"
FOR /F "delims=" %%i in ('dir /b /s "%Dir1%\*.%EXT1%"') do if exist "%Dir2%\%%~ni.%EXT4%" del "%Dir2%\%%~ni.%ext4%"
)
ist es möglich bei diesem Ansatz zu bleiben? Identische Dateien werden ja schon gelöscht.
FOR /F "delims=" %%i in ('dir /b /s "%Dir1%\*.%EXT1%"') do if exist "%Dir2%\%%~ni-*.%EXT3%" @echo del "%Dir2%\%%~ni-*.%ext3%"
bin für jeden Hinweis und Tipp dankbar..
Gruß, Wuggale..
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168037
Url: https://administrator.de/forum/vergleich-der-ersten-8-stellen-zweier-dateinamen-in-2-verschiedenen-ordnern-168037.html
Ausgedruckt am: 24.12.2024 um 02:12 Uhr
7 Kommentare
Neuester Kommentar
Hallo Wuggale,
könnte so gehen (ungetestet):
Es wird eine Zwischenvariable erzeugt, die nur die ersten 8 Stellen des Namens der PDF-Datei enthält und daraus eine Suchmaske erstellt. Der Parameter
Gruß
Friemler
könnte so gehen (ungetestet):
@echo off
setlocal EnableDelayedExpansion
Set Dir1=X:\Ziel
Set Dir2=X:\Ablage1
set EXT1=pdf
set EXT2=doc
set EXT3=xlsm
set EXT4=xls
FOR /F "delims=" %%i in ('dir /b /s "%Dir1%\*.%EXT1%"') do (
if exist "%Dir2%\%%~ni.%EXT2%" del "%Dir2%\%%~ni.%Ext2%"
if exist "%Dir2%\%%~ni.%EXT3%" del "%Dir2%\%%~ni.%Ext3%"
set "Special=%%~ni"
set "Special=!Special:~0,8!"
if exist "%Dir2%\!Special!-*.%EXT4%" del /q "%Dir2%\!Special!-*.%Ext4%"
)
Es wird eine Zwischenvariable erzeugt, die nur die ersten 8 Stellen des Namens der PDF-Datei enthält und daraus eine Suchmaske erstellt. Der Parameter
/q
bei dem DEL
-Befehl verhindert Nachfragen, ob denn wirklich alle durch die Maske angegebenen Dateien gelöscht werden sollen.Gruß
Friemler
Hallo wuggale,
warum die letzte Zeile nicht funktioniert habe ich nicht verstanden. Erkläre das doch bitte noch mal näher, evtl. inkl. Deinem Code.
Die Variable
Gruß
Friemler
warum die letzte Zeile nicht funktioniert habe ich nicht verstanden. Erkläre das doch bitte noch mal näher, evtl. inkl. Deinem Code.
Die Variable
Special
wird beim zweiten mal einfach mit einem veränderten Wert ihrer selbst belegt. Zuweisungen in Programmiersprachen sind keine mathematischen Gleichungen, deshalb funktioniert das.Gruß
Friemler