wuggale
Goto Top

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:

@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..

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

Friemler
Friemler 15.06.2011 um 14:23:04 Uhr
Goto Top
Hallo Wuggale,

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
wuggale
wuggale 15.06.2011 um 14:50:32 Uhr
Goto Top
hallo Friemler,

das ging ja im Raketentempo face-smile - leider klappt die letzte Zeile noch nicht, habe noch auf EXT3 angepasst, da ich momentan mit "xlsm" teste.

if exist "%Dir2%\!Special!-*.%EXT3%" del /q "%Dir2%\!Special!-*.%Ext3%"  

Was ich nicht ganz verstehe, warum man 2x die Variable "Special" definieren kann, da die doch schon in der 1. Definition belegt ist.

Gruß,
Wuggale
bastla
bastla 15.06.2011 um 15:02:30 Uhr
Goto Top
Hallo wuggale!
Was ich nicht ganz verstehe, warum man 2x die Variable "Special" definieren kann, da die doch schon in der 1. Definition belegt ist.
Ich weiß zwar nicht ganz genau, was Du damit meinst, aber das Wesen einer Variablen ist eben, dass ihr Inhalt/Wert variabel ist ... face-wink

Grüße
bastla
Friemler
Friemler 15.06.2011 um 15:03:15 Uhr
Goto Top
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 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
wuggale
wuggale 15.06.2011 um 15:26:05 Uhr
Goto Top
Hallo Friemler, hallo Bastler,

ok, das mit der Variable "Special" glaube ich jetzt verstanden zu haben. Eigentlich sollten im Ordner DIR2 z.B. die Dateien:
01-01111-01.xlsm
01-01111-02.xlsm
usw.
gelöscht werden, da in DIR1 ein PDF 01-01111_17-03-2011.pdf liegt. Der Code von Friemler leicht geändert ist,

@echo off  

setlocal EnableDelayedExpansion 

Set Dir1=X:\0.1 - Public Information\Ziel
Set Dir2=X:\0.1 - Public Information\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 /q "%Dir2%\%%~ni.%Ext2%"  
  if exist "%Dir2%\%%~ni.%EXT3%" del /q "%Dir2%\%%~ni.%Ext3%"  

  set "Special=%%~ni"  
  set "Special=!Special:~0,8!"  
  if exist "%Dir2%\!Special!-*.%EXT3%" del /q "%Dir2%\!Special!-*.%Ext3%"  
)

Grüße,
Wuggale
wuggale
wuggale 15.06.2011 um 15:30:57 Uhr
Goto Top
Hallo Friemler,

Kommando zurück face-smile.. es klappt, da waren noch Leerzeichen hinter der Definition der Extensions - habe das grade bemerkt face-smile.

vielen Dank für diese wahnsinnig schnellen Antworten hier, ein super Forum auf höchstem Niveau !!!
Friemler
Friemler 15.06.2011 um 15:48:21 Uhr
Goto Top
Hallo wuggale,

gern geschehen.

Tipp: Bei SET-Befehlen immer Anführungszeichen verwenden, also z.B. so:
set "EXT1=pdf"
Dann können solche Missgeschicke nicht passieren.

Gruß
Friemler