pantherstyle
Goto Top

Textdatei halbieren

Ich habe eine .txt Datei, die ich mit fc befüllt habe und die ich nun gerne auf die Hälfte reduziert hätte. In der Datei befinden sich verschieden viele Dateinamen, die untereinander geschrieben sind. Das fc was ich benutze, schreibt immer jeden Dateinamen 2mal in die Datei. Ich möchte, dass jeder Dateiname nur ein mal in die Datei geschrieben wird.
Hier der Inhalt der Datei:

ACMConvertDate.sql
BfxFctMasterGetOption.sql
UTIL_getDatePart.sql
UTIL_getFilename.sql
UTIL_isFileExistent.sql
zZz.txt
ACMConvertDate.sql
BfxFctMasterGetOption.sql
UTIL_getDatePart.sql
UTIL_getFilename.sql
UTIL_isFileExistent.sql
zZz.txt

Und hier das Script, dass sie erzeugt:

:: Erfassung der Revision von veränderten Dateien
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
for /F "tokens=1*" %%i IN (%HELP_PATH%\vorhanden.txt) DO (
fc %TAG_PATH%\%%i %BRANCH_PATH%\%%i
if ERRORLEVEL 1 echo %%i >> %HELP_PATH%\test.txt
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Content-Key: 112699

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

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: bastla
bastla 30.03.2009 um 12:08:10 Uhr
Goto Top
Hallo Pantherstyle und willkommen im Forum!

Ich würde darauf tippen, dass die Wiederholung der Namen von einem zweiten Durchlauf des Batches stammt - wenn Du daher vorweg ein
if exist "%HELP_PATH%\test.txt" del "%HELP_PATH%\test.txt"
einfügst, sollten alle Namen nach dem nächsten Ausführen des Batches nur einmal vorhanden sein.

Grüße
bastla

P.S.: Zum Posten von Batches u. Ä. bitte ""-Formatierung benutzen ...
Mitglied: Pantherstyle
Pantherstyle 30.03.2009 um 12:21:05 Uhr
Goto Top
Das habe ich schon kontrolliert, test.txt wurde vorher nicht erzeugt, weder durch das Batch selbst noch durch einen vorherigen Durchlauf. Also dopplung ausgeschlossen. Ich habe allerdings gesehen, dass er während der Ausführung die Daten 2mal durchläuft.
Mitglied: bastla
bastla 30.03.2009 um 12:23:25 Uhr
Goto Top
Hallo Pantherstyle!

Dann stehen die Dateinamen vermutlich in "%HELP_PATH%\vorhanden.txt"zweimal drin ...

Grüße
bastla
Mitglied: Pantherstyle
Pantherstyle 30.03.2009 um 12:26:03 Uhr
Goto Top
Nein ist ebenfalls überprüft. Sie stehen nur einzeln drin.
Mitglied: Pantherstyle
Pantherstyle 30.03.2009 um 13:39:12 Uhr
Goto Top
Gibt es denn die Möglichkeit, die Batch einfach die Zeilen lesen zu lassen und die Hälfte der Zeilen zu löschen?
Mitglied: bastla
bastla 30.03.2009 um 14:32:47 Uhr
Goto Top
Hallo Pantherstyle!

Das wäre mE der falsche Ansatz; sinnvoller wäre es, den Grund für die Verdoppelung herauszufinden.

Könntest Du einmal den gesamten Batch posten?

Grüße
bastla
Mitglied: Pantherstyle
Pantherstyle 30.03.2009 um 14:41:06 Uhr
Goto Top
Gerne doch.

echo off
::
::Diese Batch Datei dient der Analyse von Dateien, auf Ihren ID Block
::

::Angabe der Pfade
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set SEARCH_PATH=C:\Arbeitskopie\Suchordner
set HELP_PATH=C:\Arbeitskopie\Helfer

::Erstellen des Indexes
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rd %HELP_PATH% /s /q
mkdir %HELP_PATH%
cd %SEARCH_PATH%
dir > %HELP_PATH%\index.txt /B /S /-D /On

find /V "svn" %HELP_PATH%\index.txt > %HELP_PATH%\filterindex.txt  

::Überprüfen auf Dateiinhalt
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
for /F "skip=2 tokens=4* delims=\" %%i IN (%HELP_PATH%\filterindex.txt) DO (  
echo %%i
findstr /L :"$Id $Author $URL $LastChangedRevision $LastChangedDate $LastChangedBy" %SEARCH_PATH%\%%i  
if ERRORLEVEL 1 echo %%i >> %HELP_PATH%\IDtreffer.txt
)
Mitglied: bastla
bastla 30.03.2009 um 14:50:33 Uhr
Goto Top
Hallo Pantherstyle!

Geht's noch um das selbe Thema wie oben?

Grüße
bastla
Mitglied: Pantherstyle
Pantherstyle 30.03.2009 um 14:53:49 Uhr
Goto Top
Ohh sorry hab mich im Topic vertan hab nur mit halbieren gelesen. Mom der komplette Batch (für dieses hier richtig) ist:

echo OFF
::
:: Batch-Datei zur Ausgabe einer Tabelle. Diese Tabelle enthält den Status der in 
:: den angegebenen Verzeichnissen enthaltenen Daten. Diese Daten werden in "neu"  
:: für seit der Erstellung des Tags hinzugelangten Dateien und "verändert" für seit  
:: der Erstellung des Tags veränderten Dateien.
::

:: Veränderbar durch den Benutzer
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Eingabe der Pfade
set TAG_PATH=C:\Arbeitskopie\trunk\M_Shell\FN
set BRANCH_PATH=C:\Arbeitskopie\trunk\T_Shell\FN
set HELP_PATH=C:\Arbeitskopie\Hilfsordnerbflexxdateien
set WORK_PATH=C:\Arbeitskopie\trunk\Daten\SoftwarePaket\Batch-Dateien
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


:: Ausgabe der Nutzerangaben
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo TAG Pfad   : %TAG_PATH%
echo Branch Pfad: %BRANCH_PATH%
echo Branch Pfad: %HELP_PATH%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


:: Vorbereitung der Verarbeitung
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rd %HELP_PATH% /s /q
mkdir %HELP_PATH%
cd %TAG_PATH%
dir > %HELP_PATH%\indextag.txt /B /S /-D /On
cd %BRANCH_PATH%
dir > %HELP_PATH%\indexbranch.txt /B /S /-D /On

:: Herausfiltern der .sql Dateien
find /V "svn" %HELP_PATH%\indextag.txt > %HELP_PATH%\filtertag.txt  
find /V "svn" %HELP_PATH%\indexbranch.txt > %HELP_PATH%\filterbranch.txt  

:: Löschen der Mittlerdateien
del %HELP_PATH%\indextag.txt
del %HELP_PATH%\indexbranch.txt
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


:: Überprüfen auf Dateizugehörigkeit
echo Die Dateien wurden vorbereitet, und werden nun auf ihre Zugehoerigkeit untersucht
echo Dieser Vorgang kann bis zu einigen Minuten dauern
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Geloeschte Dateien
for /F "tokens=6* delims=\" %%i IN (%HELP_PATH%\filtertag.txt) DO (  
findstr "%%i" %HELP_PATH%\filterbranch.txt  
if ERRORLEVEL 1 echo %%i >> %HELP_PATH%\geloescht.txt
)
:: Neue Dateien
for /F "tokens=6* delims=\" %%i IN (%HELP_PATH%\filterbranch.txt) DO (  
findstr "%%i" %HELP_PATH%\filtertag.txt  
if ERRORLEVEL 1 echo %%i >> %HELP_PATH%\neu.txt
)
:: Bekannte Dateien
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
for /F "tokens=6* delims=\" %%i IN (%HELP_PATH%\filtertag.txt) DO (  
findstr "%%i" %HELP_PATH%\filterbranch.txt  
if not ERRORLEVEL 1 echo %%i >> %HELP_PATH%\vorhanden.txt
)
for /F "tokens=6* delims=\" %%i IN (%HELP_PATH%\filterbranch.txt) DO (  
findstr "%%i" %HELP_PATH%\filtertag.txt  
if not ERRORLEVEL 1 echo %%i >> %HELP_PATH%\vorhanden.txt
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


:: Erfassung der Revision von veränderten Dateien
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
for /F "tokens=1*" %%i IN (%HELP_PATH%\vorhanden.txt) DO (  
fc %TAG_PATH%\%%i %BRANCH_PATH%\%%i
if ERRORLEVEL 1 echo %%i >> %HELP_PATH%\veraendert.txt
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Mitglied: bastla
bastla 30.03.2009 um 15:14:03 Uhr
Goto Top
Hallo Pantherstyle!

"vorhanden.txt" enthält die jeweiligen Dateien doppelt, was an den entbehrlichen Zeilen 66 bis 69 liegt - lass diese weg, und es sollte funktionieren ...

Grüße
bastla
Mitglied: Pantherstyle
Pantherstyle 30.03.2009 um 15:22:43 Uhr
Goto Top
Das ist merkwürdig, es stimmt, dass die Zeilen überflüssig sind (bereits gelöscht). Alelrdings wird bei mir vorhanden.txt nur einmal befüllt, darin ist gar nichts doppelt!?
Mitglied: bastla
bastla 30.03.2009 um 15:30:12 Uhr
Goto Top
Hallo Pantherstyle!

Wenn die Dateinamen nur einmal in "vorhanden.txt" stehen, werden sie in der "for"-Schleife (Zeile 76) nur einmal gelesen und können auch höchstens einmal (in Zeile 78) geschrieben werden ...

Grüße
bastla
Mitglied: Pantherstyle
Pantherstyle 30.03.2009 um 15:42:03 Uhr
Goto Top
Naja also klappen tuts jetzt, ich nehme an da wird irgendwo nnoch ne Kopie im Zwischenspeicher gehangen haben. Ich danke dir erstmal.