tomnight2002
Goto Top

Datei in gleichnamigen Ordner kopieren per Batch

Leider habe ich durch Suchen nichts passendes gefunden. Ich suche die Möglichkeit Dateien aus einem Verzeichnis in einen gleichnamigen Ordner zu kopieren.

Hallo zusammen. Ich habe ein kleines Problem und hoffe hier gibt es dazu Hilfe oder ein paar Tipps.
Ich habe in einem Ordner Dateien erzeugt per Scanner. Diese tragen den Namen 12345.tif, 12346.tif, 12347.tif .....99999.tif

Diese Dateien sollen jetzt in gleichnamige Ordner verschoben werden. Dabei muss dann aber falls möglich der Dateiname um einen Suffix erweitert werden.

Also die Datei 12345.tif soll in den bestehnden Ordner 12345 verschoben werden. Sollte dort jetzt eine Datei mit dem selben Namen enthalten sein, muss der Name um ein Suffix erweitert werden
Bsp:

Ordner 12345 enthält bereits die Datei 12345_1.tif und 12345_2.tif so soll jetzt die Datei umbenannt werden in 12345_3.tif und in diesen Ordner verschoben werden.

Sollte dies nun nicht klappen, werde ich meine Datei eben am Scanner so erzeugen lassen.
D.h. ich gebe beim Drucken des Barcodes 12345_1 aus und habe nun die Datei schon mit dem richtigen Namen.

Jetzt müsste das Programm oder die Batch prüfen was steht vor dem _1 also 12345 und kopiert diese Datei in den Ordner 12345


Ich hoffe ich habe das so erklärt, dass ihr was damit anfangen können.
Für schnelle Hilfe wäre ich sehr dankbar.

mfg
Thomas
Kommentar vom Moderator Biber am 22.09.2009 um 09:39:28 Uhr
Verschoben von "Windows" nach "Batch & Shell".

Content-ID: 125478

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

Ausgedruckt am: 14.11.2024 um 21:11 Uhr

pieh-ejdsch
pieh-ejdsch 22.09.2009 um 13:54:43 Uhr
Goto Top
Hi Thomas,

den Ornder der Tif auf den Batch ziehen oder im Batch %~1
durch den Pfad und name des Ordners ersetzen. in Zeile 2 und 3

@echo off &setlocal
if not exist "%~1." goto :eof  
pushD "%~1"  
for %%i in (*.tif) do set "name=%~ni" & call :move  
popD
goto :eof
:move
if exist "%name%" goto :test  
mkdir "%name%"  
move "%name%.tif" "%name%" & goto :eof  
:test
set /a nr=1
for %%i in ("%name%\%name%_*.tif") do set /a nr+=1  
move "%name%.tif" "%name%\%name%_%nr%.tif"  
goto :eof

Gruß Phil
tomnight2002
tomnight2002 22.09.2009 um 14:34:49 Uhr
Goto Top
Hallo Phil,
vielen Dank für die Mühe und deine Hilfe. Leider klappt es nicht ganz bei mir.
Ich habe zum Testen den Ordner d:\astra\quelle angelegt.
Dort liegen nun meine Bilder (*.tif)

Weiter habe ich das Programm wie folgt verändert mit den Pfadangaben

set "quelle=D:\Astra\quelle"
echo %quelle% ( Wollte sehen ob der Pfad stimmt ist also nicht wichtig)
rem @echo off & setlocal (Rem, damit ich sehe was los ist)
if not exist "%quelle%" goto :eof
pushD "%quelle%"
for %%i in (*.tif) do set "name=%~i" & call :move
popD
goto :eof
:move
if exist "%name%" goto :test
mkdir "%name%"
move "%name%.tif" "%name%" & goto ::eof

:test
set /a nr=1
for %%i in ("%name%\%name%_*.tif") do set /a nr+=1
move "%name%.tif" "%name%\%name%_%nr%.tif"
goto :eof

Dos gibt mir nun folgenden Fehler zurück

D:\Astra\quelle>kopiere

D:\Astra\quelle>set "quelle=D:\Astra\quelle"

D:\Astra\quelle>echo D:\Astra\quelle
D:\Astra\quelle

D:\Astra\quelle>rem @echo off & setlocal

D:\Astra\quelle>if not exist "D:\Astra\quelle" goto :ende1

D:\Astra\quelle>pushD "D:\Astra\quelle"
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters
ist ungültig: %~i" & call :move


Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig
sind.
"♥" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

D:\Astra\quelle>for %i in (*.tif) do set "name==%~i" & call :move

Was habe ich falsch gemacht??? - Hast du noch eine Idee ??

Vielen Dank schon mal für deine Antwort.
mfg
Thomas
Biber
Biber 22.09.2009 um 18:47:27 Uhr
Goto Top
Moin tomnight2002,

willkommen im Forum.

Ersetze bitte das einfache Prozentzeichen durch ein doppeltes vor der FOR-Laufvariablen in PHs Zeile 4.

Richtiger: for %%i in (*.tif) do set "name=%%~ni"

Grüße
Biber
pieh-ejdsch
pieh-ejdsch 22.09.2009 um 19:39:30 Uhr
Goto Top
hach sowas...

bekomme ich dann den Preis für Schusselfehler nun doch irgenwann

Gruß Phil
Biber
Biber 22.09.2009 um 20:41:04 Uhr
Goto Top
<OT>

Ach weißt DU, PH,

mir ist es lieber, solche Schusselfehler zu lesen (oder auch zu machen) in selbst runtergetippseltem Code als irgendein Skript zu korrigieren oder zu warten, das aus drei oder mehr lose zusammengetackerten Copy&Paste-Blöcken aus verschiedenen Quellen und von verschiedenen Autoren besteht.

Bei Deinen Schnipseln mögen Tippfehler enthalten sein, aber die Programmlogik, Nachvollziehbarkeit und -Lesbarkeit ist gegeben.

Und damit lässt sich auf Dauer mehr anfangen als mit einem Skript der Gütekategorie "funktionierend, aber ich auch nicht so genau, was da passiert".

Grüße
Biber
</OT>
tomnight2002
tomnight2002 23.09.2009 um 10:41:21 Uhr
Goto Top
Hallo Leute. VIELEN DANK!!!!!!
Echt klasse und super schnell gelöst. Das klappt jetzt alles so, wie ich es mir vorgestellt habe.
Finde es richtig gut, wenn einem so schnell geholfen wird. Ich hoffe ich kann auch einmal hier im Forum jemandem Helfen.

Gruß Thomas face-smile
Iceman
Iceman 01.04.2011 um 16:03:40 Uhr
Goto Top
Hallo Thomas,

könntest du bitte deinen entgültigen Code hier posten.

Benötige das selbe, aber ich habe noch nicht verstanden, wie die Endversion aussehen muss.

Ich möchte übrigens damit mkv-Dateien/Ordner bearbeiten/verarbeiten.

Gruß Ice aus MVP face-smile
pieh-ejdsch
pieh-ejdsch 01.04.2011 um 18:56:08 Uhr
Goto Top
moin Iceman,

Hier haste eine etwas wartbarere Version
@echo off &setlocal
if not exist "%~1." goto :eof  

:: Einstellung für Datentypen
set "DateiTyp=.MVP"  

pushD "%~1"  
for %%i in (*%DateiTyp%) do set "name=%%~ni" & set "EXT=%%~xi" & call :move  
popD
goto :eof
:move
if exist "%name%" goto :test  
mkdir "%name%"  
move "%name%%EXT%" "%name%" & goto :eof  
:test
set /a nr=1
for %%i in ("%name%\%name%_*%EXT%") do set /a nr+=1  
move "%name%%EXT%" "%name%\%name%_%nr%%EXT%"  
goto :eof

Gruß Phil
Iceman
Iceman 01.04.2011 um 21:38:51 Uhr
Goto Top
Hey Phil

genau das meinte ich. Ich werd bekloppt.

Vielen lieben Dank.

Schönes Wochenende.

PS. solche Helfer braucht das Land (Forum) face-smile
bastla
bastla 01.04.2011 um 21:44:52 Uhr
Goto Top
[OT] @ph
set "DateiTyp=MVP"
gefällt mir irgendwie ... face-wink
Hinsichtlich der angefügten Nummer würde ich mich aber eher nicht auf das Abzählen der vorhandnen Files verlassen, sondern einfach so lange hochzählen, bis es keine Datei mit der aktuellen Nummer als Suffix gibt:
set /a nr=1 
:Schleife
if exist "%name%\%name%_%nr%%EXT%" (set /a nr+=1 & goto :Schleife)  
move "%name%%EXT%" "%name%\%name%_%nr%%EXT%"   
goto :eof
Grüße
bastla
[/OT]
pieh-ejdsch
pieh-ejdsch 02.04.2011 um 00:34:47 Uhr
Goto Top
moin bastla,

set "DateiTyp=MVP"
war ja auch gar net so Geplant. - Liegt aber irgendwie in meiner Natur, das es immer wieder auf solche Sachen herausläuft einmal selbst Brain anzuschalten (warum auch immer) - ich kann aber nix dafür...

im Grunde genommen geht es ja "nur" um das Verschieben einer Datei mit dem Namen XYZ in den Ordner XYZ.
(im Stillschweigenden) gehe ich davon aus.
wenn die Datei "XYZ.ext" schon in den Ordner drin ist, sollte doch eine solche For-Schleife ausreichen da die ja Übersetzt ( "XYZ*.ext") alle Dateien, welche mit XYZ beginnen und der Extension ".ext" abzählen.

ja eigentlich müsste es ja:
set /a nr = 0
heissen, da ja schon bei der Existenz vom 1. File an eins höher gezählt wird.
Zitat von tomnight2002
Also die Datei 12345.tif soll in den bestehnden Ordner 12345 verschoben werden. Sollte dort jetzt eine Datei mit dem selben Namen enthalten sein, muss der Name um ein Suffix erweitert werden
Aber ich gehe davon aus,: -> das File ohne Nummer ist das File welches die Nummer 1 bekommen hätte. -> Null heisst ja auch es ist nichts da.

Gruß Phil
bastla
bastla 02.04.2011 um 00:39:48 Uhr
Goto Top
@ph
Was ich gemeint hatte: Wenn, aus welchen Gründen auch immer, nur die Dateien "XYZ_1.ext" und "XYZ_3.ext" existieren, wird beim bloßen Abzählen die nächste Datei auch "XYZ_3.ext" benannt, während bei meinem Ansatz die Lücke (mit "XYZ_2.ext") gefüllt würde ...

Grüße
bastla
pieh-ejdsch
pieh-ejdsch 02.04.2011 um 01:04:24 Uhr
Goto Top
ja aus dem Gesichtspunkt hatte ich das noch gar net Betrachtet. Da ist Dein seperates Abzählen-und-prüfen wirklich besser.

da führt dann nur noch das "XYZ_2.ext" - falls es älter ist als "XYZ_3.ext" in die Datumsirre - was letztendlich im Auge (in der Wartung) des Anwenders liegt...

Gruß Phil