Avatar billede kasperh Nybegynder
16. august 2005 - 15:01 Der er 8 kommentarer og
1 løsning

batch til renaming af dirs.

Jeg har en masse dirs med filer som her:
/dirA/dir1/
/dirA/dir2/
/dirB/dir1/
/dirC/dir1/
/dirC/dir2/
/dirC/dir3/
/dirC/dir4/
/dirD/dir1/
/dirE/dir1/

Disse biblioteker vil jeg gerne have renamed, så de ligger sådan her:
/dirA - dir1/
/dirA - dir2/
/dirB - dir1/
/dirC - dir1/
/dirC - dir2/
/dirC - dir3/
/dirC - dir4/
/dirD - dir1/
/dirE - dir1/

Altså så der kun er biblioteker i roden, og ikke længere nede.
Er der en der kan hjælpe mig med at trylle sådan en batch frem?
Avatar billede dragonknight Juniormester
16. august 2005 - 15:35 #1
Start > cmd > og skriv
xcopy C:\dirA\dir1\*.* c:\dirA-dir1 /E /I  og tryk enter
Hvor c: skal være det drev hvor dine dir's er.

Når den er færdig, trykker du F3, og den samme kommando kommer frem igen. Du kan nu bruge Backspace ind til 1 er væk, tryk på 2, tryk F3, backspace til 1 er væk, tryk 2 osv indtil du får
xcopy C:\dirA\dir2\*.* c:\dirA-dir2 /E /I  og tryk enter.

Sådan bliver du ved indtil alle er kopieret, og efter du har checket at alle filer er på rette plads, kan du slette de gamle dir's.
Avatar billede kasperh Nybegynder
16. august 2005 - 16:03 #2
Det er der jo ikke særlig meget batch over.
Avatar billede bertelbrander Praktikant
16. august 2005 - 19:50 #3
Man kunne bruge noget i stil med:

@echo off
for /F %%I in ('dir /B /AD') do call :HandleSub %%I
goto :eof
:HandleSub
for /F %%A in ('dir /B /AD %1') do (
  echo md "%1 - %%A"
  echo copy %1/%%A/* "%1 - %%A"
)

Du putter det i en .bat fil og lægger den i roden af dit træ.
Så kører du den fra en kommando-prompt så du kan se hvad der sker.

Den bør så skrive (dvs skrive kommandoerne, ikke udføre dem):
md "dirA - dir1"
copy /dirA/dir1/* "dirA - dir1"

Hvis det ser rigtigt ud sletter du de sidste to forekomster af ordet echo og kører det igen, så udfører den kommandoerne.

Hvis du er modig kan du ændre copy til move, så vil den flytte filerne og ikke blot kopiere dem.
Avatar billede kasperh Nybegynder
16. august 2005 - 21:59 #4
Den vil ikke tage dirs der har mellemrum i.
f.eks:
/dirC/dir 2/
Derudover melder den 'File Not Found' flere gange. :]
Avatar billede bertelbrander Praktikant
16. august 2005 - 22:33 #5
Denne burde også kunne tage dirs med mellemrum i navnet.

for /F "tokens=*" %%I in ('dir /B /AD') do call :HandleSub "%%I"
goto :eof

:HandleSub
for /F "tokens=*" %%A in ('dir /B /AD %1') do (
  echo md "%~1 - %%A"
  echo copy "%~1/%%A/*" "%~1 - %%A"
)
Avatar billede kasperh Nybegynder
03. november 2010 - 17:41 #6
Hej Bertel. Mindes at jeg løste problemet, men kan ikke huske hvordan. Men dit svar fortjener ihvertfald point, så kan du ikke give mig et svar?
Avatar billede bertelbrander Praktikant
03. november 2010 - 22:32 #7
Jeg er ikke begyndt at samle på point
Avatar billede kasperh Nybegynder
04. november 2010 - 22:20 #8
Men det ville være det rigtige at gøre.
Avatar billede kasperh Nybegynder
23. september 2011 - 11:26 #9
Lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester