christianv6
Goto Top

Batch- Dateien mit doppeltem String Charater verschieben

Hallo zusammen,

ich bitte um eure Hilfe, benötigt wird ein Batch-Tool mit dem man Dateien verschiebt.
Und zwar liegen mir lokal mehrere PDF's vor:
1000040_140.pdf
1000040_798.pdf
2999123_123.pdf

Ich möchte jetzt nur die Dateien in einen anderen Ordner verschieben, bei denen die Zeichenkette [die erste 7 Stellen] identisch ist.
Allerdings gibt es auch PDF's die nicht nur 2 mal, sondern auch 20 mal vorkommen, diese sollen dann in einen extra Ordner verschoben werden..

Aufgrund meiner mangelnden Batch Kenntnisse wende ich mich in aller Hoffnung an euch.
LG Christian

Content-Key: 243409

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

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: Endoro
Endoro 12.07.2014 aktualisiert um 05:31:04 Uhr
Goto Top
Hey,
Das hatten wir kürzlich hier ganz ähnlich.
Gruss, Endoro
Mitglied: christianV6
christianV6 12.07.2014 um 19:12:49 Uhr
Goto Top
Hey Endoro,

Prima das war schon sehr hilfreich (: danke.
Habe jetzt noch das Problem, das ein extra Ordner erstellt wird und es wird jedes Dokument verschoben.
Ich wollte das nur das die Dokumente verschoben werden die doppelt oder mehrfach vorkommen..

Snippet vom Kollegen: Friemler:

@echo off & setlocal

set "SrcDir=E:\Test"
set "DstDir=E:\Test"

for %%f in ("%SrcDir%\*.pdf") do (
call :ProcessFile "%%~f"
)
exit /b

:ProcessFile
set "FilePath=%~dp1"
set "FileName=%~nx1"
set "Folder=%DstDir%\%FileName:~0,6%"

if not exist "%Folder%" md "%Folder%"
move "%FilePath%%FileName%" "%Folder%\%FileName%" > NUL
exit /b
Mitglied: Endoro
Endoro 13.07.2014 um 06:57:23 Uhr
Goto Top
Hey,
Dann müsstest du noch mal genau sagen, was wohin soll:
- String doppelt --> Duplikat in anderen Ordner
- String 20 mal --> was in extra Ordner? Auch was in anderen Ordner?
- was wird mit (String > 2) && (String ≠ 20)?
- weitere Regeln?

Gruss, Endoro.
Mitglied: christianV6
christianV6 13.07.2014 um 11:48:55 Uhr
Goto Top
hey,
also Pdf's die nur 2 mal vorkommen sollen in einen Ordner verschoben werden. PDF's die mehrmals vorkommen als 2 mal sollen in einen Ordner verschoben werden und PDF's die nur einem Vorkommen sollen einfach in dem Ordner bleiben. Vielen Dank für die Hilfe schon mal.

LG Grüße Christian
Mitglied: christianV6
christianV6 17.07.2014 aktualisiert um 10:10:58 Uhr
Goto Top
So ich hab hier mal was gebastelt:
Es funktioniert leider nocht nicht ganz, das Script erkennt ob sich eine Datei (Bsp: 1054400,_14011233123.pdf) oder mehrere Datein im Ordner befinden.

Leider funktionert die IF Abfrage nocht nicht.
Hoffe Ihr könnt mir weiterhelfen. Danke LG

 
@echo off
set "search=^"  
setlocal enableDelayedExpansion
echo(!$1!|findstr /r /c:"!search!" >nul && (  
  echo FOUND - Es wurden Dateien gefunden
) || (
 echo NOT FOUND - Der Ordner enthält keine Datein !
  
)
pause

:nosource
Set /P _srcdir="Eingabe des Quellverzeichnis: "  
If NOT Exist "%_srcdir%" Echo Quellverzeichnis %_srcdir% existiert nicht, Eingabe wiederholen&Goto nosource  
Set /P _dstdir="Eingabe des Zielordners: "  
If NOT Exist "%_dstdir%" MD "%_dstdir%"  
:Abfrage
@echo off


IF !search! GTR !search!(
rem hier ist ein fehler drinne hier sollte eig der Vergelich statt finden ob die Datei Zweimal voranden ist

 echo Ist mehrmals vorhanden die DAtei
 echo Die Dateien werden nun verschoben! 
 for /R %%a IN (%search%) do move "%%a" "%_dstdir%"   

) ELSE (

echo Datei ist nur einmal vorhanden
echo Datei bleibt im Ordner
)

pause
Mitglied: Endoro
Lösung Endoro 18.07.2014 aktualisiert um 09:05:54 Uhr
Goto Top
Hey,
neben der Nutzung von findstr zum Zählen kannst du Arrays verwenden. In diesem Fall wäre der erste Teil des Dateinamens der Index und die Häufigkeiten des Vorkommens die Elemente.
In der Ausgabe des Codes kannst du das nachvollziehen:
@ECHO OFF &SETLOCAL disableDelayedExpansion
set "Quellordner=test"  
set "Zielordner2=x:\Extra Ordner"  
set "Zielordner3=x:\Anderer Ordner"  
for /f "tokens=1*delims=_" %%a in ('dir /b /a-d "%Quellordner%\*_*.pdf"') do set /a .%%a+=1  
for /f "tokens=1*delims==." %%a in ('set .') do (  
	<nul set /p "=%%b Datei(en) mit %%a_*.pdf "  
	if %%b equ 1 (echo(keine Aktion) else (
		if %%b equ 2 (echo(move "%Quellordner%\%%a_*.pdf" "%Zielordner2%") else (  
			echo(move "%Quellordner%\%%a_*.pdf" "%Zielordner3%"  
		)
	)
)
Gruss, Endoro.
Mitglied: christianV6
christianV6 18.07.2014 um 09:08:01 Uhr
Goto Top
Hey Endoro,

vielen vielen vielen Dank für deine Hilfe, das Script funktioniert super (: