Toon posts:

batch rename gaat fout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik deze regel om in een keer een prefix voor bestandsnamen te gooien:

for %f in (*.*) do ren %f prefix_%f

Als ik dit in een dosbox intik gaat het perfect.

Nu zet ik het in een batch bestandje, maar dan:

for %%f in (*.*) do ren %%f prefix_%%f

Dus met dubbel %-tekens, want anders werkt het sowieso niet (staat ook in de for-help, dat dat moet). Het vreemde is nu dat als ik een lijst met bestanden heb alles goed gaat ,behalve het bovenste bestand. Dat wordt dubbel gerenamed. Dus stel je hebt flip.exe, dan wordt dat prefix_prefix_flip.exe. Dat bestand wordt dus eigenlijk als eerste gedaan en helemaal aan het eind nog een keer.

Heeft iemand een idee hoe dat kan?

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 27-08 22:38

NetForce1

(inspiratie == 0) -> true

gaat gewoon goed hier (winXP)

[ Voor 16% gewijzigd door NetForce1 op 08-06-2004 16:12 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

Topicstarter
Dat is helemaal vreemd. Bij mij gaat het altijd fout, BEHALVE als ik het met maar 1 bestand doe. Dan gaat het wel goed. Ook WinXP btw.

[ Voor 6% gewijzigd door Verwijderd op 08-06-2004 16:14 ]


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 27-08 22:38

NetForce1

(inspiratie == 0) -> true

dit is mijn uitvoer:
code:
1
2
3
4
5
6
7
8
dir>renamer test
dir>cd test
dir>for %f in (*.*) do ren %f 1_%f
dir>ren 1 1_1
dir>ren 2 1_2
dir>ren 3 1_3
dir>cd ..
dir>

renamer.bat:
code:
1
2
3
cd %1
for %%f in (*.*) do ren %%f 1_%%f
cd ..

[ Voor 28% gewijzigd door NetForce1 op 08-06-2004 16:23 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

Topicstarter
Okay, nu snap ik het echt niet meer. Hier komt ie:

renamer.bat
code:
1
for %%f in (*.jpg) do ren %%f 1_%%f


uitvoer
code:
1
2
3
4
5
6
7
8
9
10
11
12
dir>renamer

dir>for %f in (*.jpg) do ren %f 1_%f


dir>ren 1.jpg 1_1.jpg

dir>ren 2.jpg 1_2.jpg

dir>ren 3.jpg 1_3.jpg

dir>ren 4.jpg 1_4.jpg


Dit is dus goed, MAAR NU KOMT HET!

renamer.bat
code:
1
for %%f in (*.jpg) do ren %%f BLA_%%f


uitvoer
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
dir>renamer

dir>for %f in (*.jpg) do ren %f BLA_%f

dir>ren 1.jpg BLA_1.jpg

dir>ren 2.jpg BLA_2.jpg

dir>ren 3.jpg BLA_3.jpg

dir>ren 4.jpg BLA_4.jpg

dir>ren BLA_1.jpg BLA_BLA_1.jpg


Dus verander is 1_ in BLA_ dan wordt het ene bestand ineens 2 maal gerenamed 8)7

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 27-08 22:38

NetForce1

(inspiratie == 0) -> true

het zit em in die .jpg
code:
1
2
3
ren *.jpg *.
for %%f in (*.) do ren %%f BLA_%%f
ren *. *.jpg

werkt wel, maar netjes is het niet

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

Topicstarter
Hmmm, prima het werkt :) Heb je er een verklaring voor dat het zo gaat?

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 27-08 22:38

NetForce1

(inspiratie == 0) -> true

nope, ben wel zeer geïnteresseerd

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

Topicstarter
Ja ik ook. Ik gebruik het al een heel tijdje en ik renamede het ene bestand dat fout ging altijd handmatig terug. Maar nu moet ik het echt heel veel gaan gebruiken en dan wordt het irritant. Ben blij dat het zo werkt. Had geen idee dat het in dat .jpg zou zitten.

Maar waarom het nou fout gaat is me alles behalve duidelijk.

  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 27-08 15:02

sjaakaq

It might get loud

Files read only?
Heb je er de rechten voor?

leoaq.fm // Jeune Loop


Verwijderd

Topicstarter
Nee files zijn niet read only, en ja ik heb de rechten. Anders zou hij toch helemaal niet renamen?

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 27-08 22:38

NetForce1

(inspiratie == 0) -> true

na wat zoekwerk vond ik dit
Notice, because LFNs occupy multiple entries in the directory listing, more
than one file of each run gets renamed with the .0 appended because they get
place at the end of the directory listing. As you have noted, this anomaly
does still occur in Win2K, because the FOR command traps LFNs (same as Win9x
does when LFNFOR is ON). In fact, as you can see above, the problem expands
exponentially in comparison to the 8.3 anomaly.

In short, when using the FOR command, always avoid renaming files to new
names that will also match the FOR mask. If you must rename files this way,
then ECHO the REName commands to a transient batch and then CALL that batch.
This will prevent the multiple renaming anomaly.

@echo off
echo @echo off>tmp.bat
for %%? in (pathdef.c*) do echo ren "%%?" "%%?.0" >>tmp.bat
call tmp.bat
del tmp.bat
Het komt dus omdat files meerdere keren aan het masker van de for-opdracht voldoen, dus een oplossing die imo mooier is dan die in de quote:
code:
1
2
3
ren *.jpg *.jp_
for %%f in (*.jp_) do ren %%f BLA_%%f
ren *.jp_ *.jpg

wat natuurlijk gewoon dezelfde oplossing is als die ik eerder al gepost had, maar nu begrijp ik em ook min of meer :P je kunt de extensie .jp_ ook weglaten, maar het gevaar is dat er dan ook files hernoemd worden waarvan je dat helemaal niet wilt.

[ Voor 29% gewijzigd door NetForce1 op 08-06-2004 19:54 . Reden: linkje aangepast ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"

Pagina: 1