Als je het in pure batch zou willen doen, krijg je zoiets als:
(Let op: Niet uitproberen! Dit is uit de losse pols opgeschreven om een richting aan te geven. Code is niet gecontroleerd en al helemaal niet getest)
code:
1
2
3
4
5
6
| md aangepast 2>nul
for %%x in (*.txt) DO (
echo %%~x > "aangepast\%%~nxx"
for /f "skip=1 usebackq delims=" %%y in ("%%x") DO echo %%y >> "aangepast\%%~nxx"
)
) |
Er staat zoiets als:
Voor elk txt bestand: schrijf de naam van het bestand naar een nieuwe file en doorloop vervolgens de inhoud van de txt-file (muv de eertste regel;
skip=1 !!) en plak elke regel die je tegenkomt achter het nieuw aangemaakte bestand.
Dit heeft echter bijwerkingen. Elke tekstregel (muv eerste, natuurlijk) komt op de commando-regel terecht. Als in die regel speciale tekens staan, zal CMD passende acties ondernemen. De alarmbellen kunnen afgaan bij (onder andere) !, %, ^, &, *, <, en >. Als je tekst dze tekens bevat, heb je dus mogelijk een probleem. Zonder extra code gaat het verder nog fout op lege regels.
Daarom raad ik je toch het gebruik van een tooltje aan.
In de Unix wereld wordt hiervoor veel gebruik gemaakt van SED en tegenwoordig steeds vaker AWK. Dit zijn zeer,zeer krachtige tools om tekst te zoeken en/of te vervangen. Aan de andere kant: voor een toevallige voorbijganger ziet een commando-regel er uit alsof je willekeurig shift-1 tot en met shift-0 hebt ingetoetst. Het kost de nodige tijd om aan te leren.
Anyhoedanook: Er is gelukkig ook een Windows-versie beschikbaar.
de opdracht om te doen wat jij wilt wordt daarmee:
code:
1
| for %x in (*.txt) DO SSED.EXE -i.backup 1s/.*/"%~nx"/ "%x" |
Zoals beloofd, volstrekt onleesbaar :-) (en dit is nog maar een simpele opdracht)
De losse onderdelen:
SSED.EXE
-i.backup vervang binnen het bestand zelf en maak een back-up met extensie backup
1s/ vervang alleen op de eerste regel
/.*/ zoek naar willekeurige tekst
/"%~nx"/ Vervang dit door uitsluitend de naam van het bestand (zonder extensie);%~nx is eigenlijk een cmd-ding; het wordt ingevuld nog voordat SSED aan de gang gaat
De instructies:
- maak een map met daarin een aantal van je tekstbestanden (om te testen)
- plaats in diezelfde map SSED.exe
- Start de CMD-prompt in die map
- geef bovenstaande commando in
- wacht kort (Sed is supersnel)
- bekijk resultaat.
De .backup bestanden bevatten het origineel en kun je wel weggooien (Deze SED-variant heeft kuren als je geen backupbestand opgeeft).
Je krijgt vanavond de link naar SSED van me (nu niet bij de hand en er zijn te veel varianten van)
Suxes!
P.S. Mijn tip: als je vaker met grote aantallen bestanden werkt, verdiep je dan een kwartier in de mogelijkheden van het FOR commando (FOR /? op de prompt vertelt bijna alles). Dan weet je ongeveer wat het kan op het moment dat je voor een nieuwe uitdaging staat.
SED is niet voor iedereen en zou ik aan je voorbij laten gaan.
Maar, zoals Killah_Priest en F_J_K ook al meldden: PowerShell heeft met dit soort opdrachten nog minder moeite. En dan ziet je code er ineens wel leesbaar uit :-)