Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Dateien in einem Ordner zählen

Frage Entwicklung Batch & Shell

Mitglied: starspieler

starspieler (Level 1) - Jetzt verbinden

04.08.2009, aktualisiert 12:18 Uhr, 5333 Aufrufe, 6 Kommentare

Hallo,
ich Schreibe derzeit eine Batch Prozedur und habe folgendes Problem.

Ich kopiere aus einem Quellordner eine bestimmte Datei.
Beispiel: "NameDerDatei 2009.08.04.pdf" in ein anderes Verzeichnis (Zielordner) wo bereits eine Datei "NameDerDatei 2009.08.01.pdf"
vorhanden ist.

Soviel zum Standardfall.

Am Ende habe ich zwei Dateien mit der gleichen Bezeichnung, die sich nur am Ende durch ein Datum unterscheiden.
Im Zielordner soll allerdings nach erfolgreichem Kopieren der neuen Datei die alte gelöscht werden.
Problem ist dabei allerdings, dass wenn im Zielordner vorher keine Datei vorhanden war oder das Kopieren nicht geklappt hat, die alte Datei nicht gelöscht werden darf.

Also habe ich mir überlegt den Inhalt des Zielordners in eine .txt-Datei zu Schreiben.

dir /b "NameDerDatei *.pdf" >test.txt

Dabei steht das * für das Datum im Dateinamen.

Wie bekomme ich das jetzt hin?
Also wie gesagt: Sind zwei Dateien ("NameDerDatei *.pdf") vorhanden kann die alte gelöscht werden.
Sollte sich aber nur eine Datei (nach dem Kopiervorgang) im Zielordner befinden, so darf diese nicht gelöscht werden.

Kann mir jemand bei dem Lösungsansatz helfen?

Ich wäre über eine Antwort sehr dankbar
Mitglied: 60730
04.08.2009 um 12:37 Uhr
Servus und willkommen im Forum,

am "schönsten" ist es immer - wenn man(n) die Batch sieht, an der man mithelfen soll.

dir /b "NameDerDatei *.pdf" >test.txt
wäre dann das einzigste, was derzeit erkennbar ist und daher sollte
01.
dir /b "NameDerDatei *.pdf" |find "1 Datei" && echo einz  
02.
dir /b "NameDerDatei *.pdf" |find "2 Datei" && echo zwei 
Als Ansatz reichen (müssen)

Gruß
Bitte warten ..
Mitglied: starspieler
04.08.2009 um 14:00 Uhr
Hallo und Danke für deine Antwort!

Ja ich weiß, aber leider kann ich das nicht so einfach Kopieren und hier einfügen.
Die Batch ist ziemlich umfangreich. Alles umzubenennen wäre viel Arbeit. Müsste das unkenntlich machen.
aber ich versuchs mal soweit:


%access% %db% /x "Makro Erstelle Liste"
echo Sobald Sie die neue Uebersichtsliste erstellt haben, fahren Sie bitte fort.

rem Erstellt ein Testverzeichnis im Zielordner, um zu Überprüfen, ob der Benutzer Schreibrechte im Zielverzeichnis hat.
y:
mkdir Y:\Projekte\test
if exist Y:\Projekte\ test goto normal
goto rechteproblem

rem loescht nach erfolgreicher Erstellung das Testverzeichnis.
:normal
rmdir /s /q Y:\Projekte\test

echo Arbeitsschritte:
echo Wechseln in das Verzeichnis der aktuellen Datei
cd /d %quelle%

echo Markieren der aktuellsten Datei als Letzte Datei
for /f "delims=" %%i in ('dir /a-d /b /od *.pdf') do (set Letzte_Datei=%%i)

echo Kopieren der aktuellsten Datei in das Zielverzeichnis
rem Kopiert die aktuelle Datei aus dem Quellverzeichnis in das Zielverzeichnis
copy "%Letzte_Datei%" %ziel%


So das ist jetzt die Stelle an der im Zielordner Überprüft werden muss, ob eine "NameDerDatei *.pdf" vorhanden ist oder sogar zwei!

Sollte sich nur eine darin befinden soll er weiterspringen, sind aber zwei vorhanden dann soll er die letzte löschen.

das Löschen sieht bei mir jetzt so aus:

:loeschen
rem Loeschen der alten Datei im Zielverzeichnis


y:
cd %ziel%
rem pause
for /f "delims=" %%i in ('dir /o-d /b "NameDerDatei *.pdf"') do set alte_datei=%%i
erase /F "%alte_datei%"
goto loeschenerfolgreich
:loeschfehler
rem Ein Loeschfehler kann auftreten, wenn die letzte Datei z.B. in Benutzung ist.
echo Die aktuelle Datei konnte nicht geloescht werden. Bitte pruefen Sie ob die Datei in Benutzung ist.
echo.
echo Bitte Wiederholen Sie den Vorgang Später nochmals oder loeschen Sie die Datei, nach Absprache manuell.

set /p choice=Moechten Sie den Kopiervorgang fortsetzen? (j/n)
if "%choice%" == "j" goto loeschenerfolgreich
if "%choice%" == "n" goto nichterfolgreich
:loeschenerfolgreich
echo Die Datei wurde erfolgreich geloescht

:normal2
echo Sie koennen das Programm jetzt schliessen
pause
goto ende

:rechteproblem
echo Sie haben nicht die erforderliche Berechtigung um die Liste zu aktualisieren!
pause
goto ende

:nichterfolgreich
echo.
echo Das Loeschen der NameDerDatei im Zielverzeichnis ist fehlgeschlagen.
pause
goto ende

:ende



Kann mir Jemand jetzt vll. besser helfen?
Bitte warten ..
Mitglied: 60730
04.08.2009 um 15:08 Uhr
Zitat von starspieler:
Hallo und Danke für deine Antwort!

Ja ich weiß, aber leider kann ich das nicht so einfach Kopieren
und hier einfügen.
Die Batch ist ziemlich umfangreich. Alles umzubenennen wäre viel
Arbeit. Müsste das unkenntlich machen.

Servus,

das geht ganz einfach mit Notepad und [Strg] [H] suchen & ersetzen.
Schau mal nach Formatierungshilfespeziell Codeblöcke

Nur mal so ein Ansatz - zum "besseren" Lesegefühl..

Sind die Dateinamen mit einem Datum versehen?
Es "scheint" so...
edit
jau der, wo lesen tutet ist wie immer im Vorteil..
/edit

Wenn ja -würde ich einen ganz anderen Ansatz verfolgen.
(nicht den da unten - das ist deiner (Bastlas?) in Code Blöcken)

01.
%access% %db% /x "Makro Erstelle Liste" 
02.
echo Sobald Sie die neue Uebersichtsliste erstellt haben, fahren Sie bitte fort. 
03.
  
04.
rem Erstellt ein Testverzeichnis im Zielordner, um zu 
05.
Überprüfen, ob der Benutzer Schreibrechte im Zielverzeichnis hat. 
06.
y: 
07.
mkdir Y:\Projekte\test 
08.
if exist Y:\Projekte\ test goto normal 
09.
goto rechteproblem 
10.
  
11.
rem loescht nach erfolgreicher Erstellung das Testverzeichnis. 
12.
:normal 
13.
rmdir /s /q Y:\Projekte\test 
14.
  
15.
echo Arbeitsschritte: 
16.
echo Wechseln in das Verzeichnis der aktuellen Datei 
17.
cd /d %quelle% 
18.
  
19.
echo Markieren der aktuellsten Datei als Letzte Datei 
20.
for /f "delims=" %%i in ('dir /a-d /b /od *.pdf') 
21.
do (set Letzte_Datei=%%i) 
22.
  
23.
echo Kopieren der aktuellsten Datei in das Zielverzeichnis 
24.
rem Kopiert die aktuelle Datei aus dem Quellverzeichnis in das Zielverzeichnis 
25.
copy "%Letzte_Datei%" %ziel%
...den da...
01.
:para 
02.
set "Jahr=%date:~-4%" 
03.
set "Monat=%date:~-7,2%" 
04.
set "Tag=%date:~-10,2%" 
05.
set "WTag=%date:~-13,2%" 
06.
:access 
07.
start /wait "Datenbank" %access% %db% /x "Makro Erstelle Liste" 
08.
if exist %ziel%\namederdatei.*.pdf del %ziel%\namederdatei.*.pdf 
09.
move %quelle%\namederdatei.%jahr%-%monat%-%Tag%.pdf %ziel%\namederdatei.%jahr%-%monat%-%Tag%.pdf
Gruß
Bitte warten ..
Mitglied: starspieler
10.08.2009 um 09:53 Uhr
hallo,
ich habe jetzt dafür eine Lösung gefunden.

Jetzt brauche ich aber noch Hilfe für ein anderes Problem.

Und zwar habe ich eine Abfrage eingebaut. Diese soll mit "j" oder "n" beantwortet werden.
bei allen anderen eingaben soll die abfrage erneut beginnen.

set /p choice=Moechten Sie den Kopiervorgang fortsetzen? (j/n)
if "%choice%" == "j" goto auswahlja
if "%choice%" == "n" goto auswahlnein

klingt zwar doof und unrealistisch, dass wirklich mal jemand auf die super idee kommt und n eingibt, sondern 1,2,3 oder !,h,ö,ü aber so solls dann gelöst werden.
Hat jemand eine Ahnung wie man sowas lösen kann?

LG
Bitte warten ..
Mitglied: Biber
10.08.2009 um 10:27 Uhr
Moin starspieler,

ich hätte als zuständiger Moderator dieses Zweigarms eine klitzekleine Bitte

Zitat von starspieler:
hallo,
ich habe jetzt dafür eine Lösung gefunden.

Jetzt brauche ich aber noch Hilfe für ein anderes Problem.
Und Du denkst, so ein Feedback ist der Sinn eines Forums?
Wenn Du einen Lösungsansatz/Lösungsvorschlag bekommen hast, bei dem nur Du allein bestätigen kannst, ob dieser die Anforderungen erfüllt, dann ist doch sinnvoll zu antworten
  • "Danke, das war der richtige Tipp"
-oder-
  • "Netter Versuch, aber das hilft mir nicht über'n Winter, weil...."
-oder-
  • "Habe Deinen Ansatz nicht ausprobiert, weil mir zwischenzeitlich eine ganz andere idee kam, und zwar habe ich es jetzt so gelöst..."

Außerdem hat T-Mo ein paar (für seine Verhältnisse) überaus geduldige und freundliche Hinweise gegeben:
am "schönsten" ist es immer - wenn man(n) die Batch sieht, an der man mithelfen soll.

Schau mal nach Formatierungshilfe speziell Codeblöcke

...die eigentlich hätten wahrgenommen werden müssen, wenn die Du die Antworten genauso ernst nehmen würdest wie wir Deine Noob-Gehversuche.

Wenn Du erwartest, dass uns Deine Prioritäten interessieren, dann zeige bitte auch Deine Kompromissbereitschaft bezüglich unserer Verhaltensregeln.

Und zu guter Letzt, weil genau diese Hohlphrase immer in meinem Bereich abgeladen wird

Ich wäre über eine Antwort sehr dankbar

Leicht begeisterungsfähige Menschen können sich über eine Antwort vielleicht freuen und/oder für eine Antwort dankbar sein. Aber nicht umgekehrt.

Damals in meinem ersten Mittelstufen-Praktikum, als ich die Rohfassung des Ur-Dudens geschrieben habe, bekam ich immer Punktabzug für so etwas.


Zu Deiner Frage:
Du kannst z.B in allen nicht "j"/"n"-Fällen die Abfrage wiederholen, bis der geneigte DAU es verstanden hat.
01.
.... 
02.
:Abfrage 
03.
 	set /p choice=Moechten Sie den Kopiervorgang fortsetzen? (j/n) 
04.
 	if  /i "%choice%" == "j" goto auswahlja 
05.
 	if  /i "%choice%" == "n" goto auswahlnein 
06.
                     echo Bitte nur J oder N eingeben! 
07.
                     goto :Abfrage
Der Schalter /i beim IF-Stringvergleich ignoriert Klein/Gross-Schreibunterschiede (erlaubt "j" und "J" und "n"/"N").

Grüße
Biber
Bitte warten ..
Mitglied: starspieler
10.08.2009 um 10:43 Uhr
Sorry und danke für den Hinweis.
Es war nicht meine Absicht hier die Antworten und die Hilfe mit Füßen zu treten.

Also nocheinmal ein kleiner Ausflug in die vorherige Problematik (Löschen).
Ich habe die vorhandene Datei einfach mit einer Extesion versehen (.SAV)
und im Zielordner gelassen.
Nach erfolgreichem Kopiervorgang der neuen Datei habe ich die .SAV Datei einfach gelöscht.
Sollte der Kopiervorgang nicht erfolgreich sein. Benenne ich die Datei einfach wieder um, oder besser gesagt ich lösche die Extension .SAV

das habe ich wie folgt gelöst:




01.
 :pdfvorhanden 
02.
	rename "NameDerDatei *.pdf" "NameDerDatei *.pdf.SAV" 
03.
 
04.
:altedateiwiederherstellen 
05.
        for %%i in ("NameDerDatei *.pdf.SAV") do rename "%%i" "%%~ni" goto endewiederhergestellt
mit dem letzten Befehl wird einfach die Extension gelöscht. Das ist nicht die eigentliche Endung .pdf sondern in dem Fall die .SAV.


Soviel dazu.
Zu der anderen Problematik. Natürlich habe ich mir schon gedacht, dass ich einfach die Abfrage wiederholen könnte. Aber das soll halt anders gelöst werden. Bei dem Testszenario soll eine falsche Eingabe wieder zum Beginn der Abfrage führen.


EDIT:
ich habs jetzt einfach mal so gelöst:

01.
 
02.
:falscheeingabe	 
03.
	set /p choice=Moechten Sie den Kopiervorgang fortsetzen? (j/n) 
04.
	if /i "%choice%" == "j" goto auswahlja 
05.
	if /i "%choice%" == "n" goto auswahlnein 
06.
	echo Sie haben eine falsche Eingabe getaetigt. Bitte geben Sie einen richtigen Parameter an (j/n). 
07.
pause 
08.
	goto falscheeingabe 
09.
 
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Windows Server
gelöst Freigegebener Ordner "Eigene Dateien" (8)

Frage von JensDND zum Thema Windows Server ...

Windows 10
Löschen von Ordner mit Dateien (3)

Frage von jerry32 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...