Avatar billede nph12 Nybegynder
31. august 2003 - 13:05 Der er 72 kommentarer og
2 løsninger

Kopiere filer ved hjælp af en batch-fil

Hej
Hvordan laver jeg en batch-fil, som kopiere en bestemt type filer f.eks. jpg i et bibliotek (samt under biblioteker) over til et andet?

Hvad skal jeg skrive af kommando i batch-filen?
Avatar billede and_ Nybegynder
31. august 2003 - 13:08 #1
xcopy *.jpg /e "stien hvor det skal hen"
Avatar billede and_ Nybegynder
31. august 2003 - 13:08 #2
svar
Avatar billede and_ Nybegynder
31. august 2003 - 13:09 #3
for flere informationer om xcopy tast:

xcopy /?
Avatar billede nph12 Nybegynder
31. august 2003 - 13:19 #4
Det kører næsten som det skal. Den kopiere også mapperne over, den skal den ikke. Den skal finde alle jpg-filer og kopiere alle disse over i en mappe (uden mapper).
Avatar billede and_ Nybegynder
31. august 2003 - 13:22 #5
så fjerner du bare /e

det er denne switch der kopierer mapperne over....
Avatar billede thesurfer Nybegynder
31. august 2003 - 13:23 #6
du kan bruge:

copy *.jpg "destination"

eller:

xcopy *.jpg "destination"

put destinationen i "" så er du sikker på at den finder stien.. selvom der er den har et langt navn, eller mellemrum i navnet..
Avatar billede nph12 Nybegynder
31. august 2003 - 13:32 #7
Den kopiere stadigvæk mapperne med over

xcopy/s *.jpg "d:\Billeder\"
Avatar billede thesurfer Nybegynder
31. august 2003 - 13:36 #8
afprøvet og virker:

copy *.jpg "d:\temp\dest"
Avatar billede and_ Nybegynder
31. august 2003 - 13:36 #9
du har jo også /s aktiveret - af med den
Avatar billede thesurfer Nybegynder
31. august 2003 - 13:38 #10
hvorfor ikke bare nøjes med den enkle copy kommando? den bruges til simple kopierings operationer..
xcopy bruges mere til "komplexe" operationer..
Avatar billede and_ Nybegynder
31. august 2003 - 13:41 #11
thesurfer > Der er jo flere muligheder i xcopy, hvis han senere vil udbygge det lidt...

Bortset fra det, er det jo nøjagtigt det samme svar du giver som jeg.

copy er jo en gammel standard med meget få muligheder....
Avatar billede thesurfer Nybegynder
31. august 2003 - 13:47 #12
nemlig.. copy er simpel.. han skal have kopieret nogle filer.. de behøver ikke at være kønt, bare funktionelt.. copy klarer opgaven..
mht. at copy har meget få muligheder, kan jeg kun give dig ret i.. men "få" muligheder indkluderer den opgave som copy egentligt skulle gøre.. at kopierer filer..
Avatar billede nph12 Nybegynder
31. august 2003 - 13:47 #13
Den vil ikke rigtigt kopiere til mappen.
Avatar billede and_ Nybegynder
31. august 2003 - 13:48 #14
??????????

hvad har du gjort
Avatar billede thesurfer Nybegynder
31. august 2003 - 13:50 #15
nph12>

[citat]

afprøvet og virker:

copy *.jpg "d:\temp\dest"

[/citat]
Avatar billede thesurfer Nybegynder
31. august 2003 - 13:54 #16
..du erstatter bare "d:\temp\dest" med din egen mappe..
Avatar billede nph12 Nybegynder
31. august 2003 - 14:39 #17
Det virker stadigvæk ikke hos mig. Har prøvet:

copy *.jpg "d:\billeder\"
xcopy *.jpg "d:\billeder\"

(jeg har en mapper som hedder "d:\billeder\")

Batch filer kører jeg i min mappe "mine billeder", men der er undermapper til denne mappe.

Hvis jeg kører denne kommando "virker" det:

xcopy/s *.jpg "d:\billeder\"

Men jeg får mapperne med over og det skal jeg ikke!
Avatar billede thesurfer Nybegynder
31. august 2003 - 14:43 #18
det kan være du har problemer med rettighederne til mappen billeder..

prøv selv at kopiere et billede over til mappen billeder.. først prøv med musen, hvis det virker, prøv med kommandoprompt/dos-prompt
Avatar billede and_ Nybegynder
31. august 2003 - 14:46 #19
Du vil ha:

1. alle jpg-filer fra den pågældende mappe skal kopieres!
2. alle undermapper skal gennemløbes og alle jpg-filer skal kopieres?
3. undermapperne skal ikke kopieres med. Det er kun indholdet af dem?
4. Har undermapperne faste navne eller varierer de fra dag-til-dag?
Avatar billede nph12 Nybegynder
31. august 2003 - 14:57 #20
1. Ja
2. Ja.
3. Ja, Ja
4. Ikke faste navne

Det er ikke prøver med rettighederne -har lige prøvet at kopiere et billede over til mappen
Avatar billede and_ Nybegynder
31. august 2003 - 15:00 #21
hmmmmmmmmm, den var værre....

Skal lige kigge i de gamle støvede bøger....

jeg vender tilbage
Avatar billede bertelbrander Novice
31. august 2003 - 15:08 #22
Jeg har lavet følgende, der burde kunne det du vil. Hvis der er to filer der heddder det samme, f.ex one.jpg vil den første kommme til at hedde one.jpg og den anden one1.jpg:

@echo off
setlocal
if [%1]==[] echo "You Must specify a Destination"& goto :eof
if [%2]==[] call :Process "%1" *.*& goto :eof

:Next
call :Process "%1" %2
shift /2
if [%2]==[] goto :eof
goto :Next

:Process
for /F "delims=;" %%A  in ('dir /B /S /A-D %2') do call :CopyIt "%%~dpA" "%%~nA" "%%~xA" %1
goto :eof

:CopyIt
set xxx=
:TryAgain
if exist %~4\%~2%xxx%%~3 set /A xxx+=1&goto TryAgain
copy %~1%~2%~3 %~4\%~2%xxx%%~3 >nul 2>&1

Du putter ovenstående i en bat-fil (f.ex mycopy.bat) og kører det på denne måde:
mycopy dest [ext1 [ext2]]

hvor dest er destinationen og ext1 (og ext2) er de ekstensions du vil have kopieret, dest kan f.ex være d:\backup og ext1 kan være *.jpg. Hvis du ikke angiver nogen extension vil alle filer blive kopieret. Dest må IKKE være en undermappe af den mappe hvorfra du kopierer, ellers vil du komme til at køre i en uendelig løkke.
Avatar billede and_ Nybegynder
31. august 2003 - 15:11 #23
Halleluja for at man kan stjæle kode fra kandu.dk og kalde det sit eget værk bertel

det er jo faktisk direkte kopi
Avatar billede bertelbrander Novice
31. august 2003 - 15:19 #24
Hvis du kikker efter på kandu, kan du måske regne ud hvem der har lavet det!
Avatar billede nph12 Nybegynder
31. august 2003 - 15:36 #25
Jeg har kopieret koden ind i en bat-fil.

Hvad gør jeg så?
Avatar billede thesurfer Nybegynder
31. august 2003 - 15:57 #26
nph12> jeg gætter på at du skal:

1) starte et dos-prompt
2) navigere til mappen med billederne du vil have kopieret
3) skriv:
  mycopy.bat "D:\billeder" *.jpg
  og trykke enter..

bertelbrander> ville det ikke have været bedre/nemmere hvis man kunne skrive:

mycopy.bat source dest ext1 ext2 ?
f.eks.:
mycopy.bat "D:\billeder_her_og_der" "D:\billeder_samlet_i_denne_ene_mappe" *.jpg
Avatar billede bertelbrander Novice
31. august 2003 - 16:03 #27
Så gemmer du filen i enten den mappe hvorfra du vil kopiere eller en mappe der er i din path (f.ex c:\winnt\system, skriv path i en dos-prompt for as hvilke mapper der er i din path). Dernæst stiller du dig i den mappe du vil kopiere fra (dvs åbner en dos-prompt og bruger cd \xxx\yy) og til slut kalder du bat-filen som beskrevet ovenfor.
Avatar billede bertelbrander Novice
31. august 2003 - 16:09 #28
>thesurfer jeg så ikke lige dit indlæg, din beskrivelse er rigtig.
Jeg kan godt lave det så source bliver en parameter.

and_> jeg hedder også Bertel Brander ude i den ikke virtuelle verden.
Avatar billede thesurfer Nybegynder
31. august 2003 - 16:15 #29
"ikke virtuelle verden"?? hvad mener du med det?? :).. (ja, det var en joke.. tror jeg nok..)
Avatar billede and_ Nybegynder
31. august 2003 - 16:18 #30
sorry var ikke lige vågen ;)
Avatar billede bertelbrander Novice
31. august 2003 - 17:07 #31
Den "ikke virtuelle verden" er det der af nogle ignoranter blever betragtet som eller anset for at være "virkeligheden".
Avatar billede nph12 Nybegynder
31. august 2003 - 19:07 #32
Jeg har lagt bat-filen under c:\winnt\system. Jeg stiller mig i den mappe, jeg gerne vil kopiere fra (mappem "mine billeder" har undermapper).

Jeg kalder bat-filen i cmd sådan: mycopy.bat "D:\billeder" *.jpg , men der sker ikke noget. Hvad gør jeg forkert?
Avatar billede bertelbrander Novice
31. august 2003 - 20:14 #33
Der er flere ting der kan gå galt, for at finde ud af hvad, erstatter du den sidste linie i bat-filen med:

echo copy %~1%~2%~3 %~4\%~2%xxx%%~3
copy %~1%~2%~3 %~4\%~2%xxx%%~3

Og kører bat-filen igen og fortæller hvad der sker.
Avatar billede nph12 Nybegynder
31. august 2003 - 21:29 #34
Jeg skriver mycopy.bat "D:\billeder" *.jpg  i cmd. Der sker ikke noget i et par minutter og derefter kører den alle filer igennem, men skriver også "Den angivet fil blev ikke fundet"
Avatar billede bertelbrander Novice
31. august 2003 - 22:46 #35
Har du en mappe der hedder d:\billeder? Hvis ikke skal du lave den først.
Prøv at fortælle nøjagtigt hvad den skriver.
Avatar billede nph12 Nybegynder
31. august 2003 - 23:30 #36
Nu kører det! Kan man gøre et eller andet, så den kun kopiere en fil over, hvis der findes flere af samme slags?
Avatar billede bertelbrander Novice
01. september 2003 - 00:10 #37
Skal scriptet teste om der er flere filer der hedder det samme inden den kopierer, og kun kopiere hvis der er flere der hedder det samme?
Avatar billede nph12 Nybegynder
01. september 2003 - 14:20 #38
Hvis der er flere filer med samme navn, skal der kun kopieres en fil.
Avatar billede bertelbrander Novice
01. september 2003 - 17:37 #39
Utestet, prøv det:

@echo off
setlocal
if [%1]==[] echo "You Must specify a Destination"& goto :eof
if [%2]==[] call :Process "%1" *.*& goto :eof

:Next
call :Process "%1" %2
shift /2
if [%2]==[] goto :eof
goto :Next

:Process
for /F "delims=;" %%A  in ('dir /B /S /A-D %2') do call :CopyIt "%%~dpA" "%%~nA" "%%~xA" %1
goto :eof

:CopyIt
if exist %~4\%~2%~3 goto :eof
copy %~1%~2%~3 %~4\%~2%~3 >nul 2>&1
Avatar billede nph12 Nybegynder
01. september 2003 - 22:08 #40
Det kører fint - jeg har fået alle billederne overført til mappen.

Kunne man ikke lave en bat-filen, som thesurfer
31/08-2003 15:57:24 beskrev?
Avatar billede bertelbrander Novice
01. september 2003 - 23:30 #41
Jeg har lavet en version hvor man angiver source dir som første parameter, man kan bruge . til at angive nuværende dir.
Denne version vil checke om destinations mappen eksisterer, hvis den ikke gør det bliver man spurgt om den skal laves.
Dette er versionen der giver filer med samme navn fortløbende numre, en version der ikke overskriver eksisterende filer følger.
Så brugen er:
mycopy.bat source dest [ext1 [ext2 [...]]]

@echo off
setlocal
if [%1]==[] echo You Must specify a Source & goto :eof
if [%2]==[] echo You Must specify a Destination & goto :eof
set SourcePath="%1"
set DestPath="%2"
if not exist %DestPath:"=%\. call :CheckDest
if not exist %DestPath:"=%\. goto :EOF

if [%3]==[] call :Process *.*& goto :eof

:Next
call :Process %3
shift /3
if [%3]==[] goto :eof
goto :Next

:Process
for /F "delims=;" %%A  in ('dir /B /S /A-D %SourcePath:"=%\%1') do call :CopyIt "%%~dpA" "%%~nA" "%%~xA"
goto :eof

:CopyIt
set xxx=
:TryAgain
if exist %DestPath:"=%\%~2%xxx%%~3 set /A xxx+=1&goto TryAgain
copy %~1%~2%~3 %DestPath:"=%\%~2%xxx%%~3 >nul 2>&1
goto :eof

:CheckDest
set /P Answer=%DestPath:"=% Does not exist, do you want to create it?
if [%Answer%]==[n] (
  echo I can't copy any files then!
  goto :eof
) else (
  MD %DestPath:"=%
  if not exist %DestPath:"=%\. echo Failed to Create %DestPath:"=%
)
Avatar billede bertelbrander Novice
01. september 2003 - 23:35 #42
En version der ikke overskriver eksisterende filer:

@echo off
setlocal
if [%1]==[] echo You Must specify a Source & goto :eof
if [%2]==[] echo You Must specify a Destination & goto :eof
set SourcePath="%1"
set DestPath="%2"
if not exist %DestPath:"=%\. call :CheckDest
if not exist %DestPath:"=%\. goto :EOF

if [%3]==[] call :Process *.*& goto :eof

:Next
call :Process %3
shift /3
if [%3]==[] goto :eof
goto :Next

:Process
for /F "delims=;" %%A  in ('dir /B /S /A-D %SourcePath:"=%\%1') do call :CopyIt "%%~dpA" "%%~nA" "%%~xA"
goto :eof

:CopyIt
if exist %DestPath:"=%\%~2%~3 goto :eof
copy %~1%~2%~3 %DestPath:"=%\%~2%~3 >nul 2>&1
goto :eof

:CheckDest
set /P Answer=%DestPath:"=% Does not exist, do you want to create it?
if [%Answer%]==[n] (
  echo I can't copy any files then!
  Goto :eof
) else (
  MD %DestPath:"=%
  if not exist %DestPath:"=%\. echo Failed to Create %DestPath:"=%
)
Avatar billede nph12 Nybegynder
02. september 2003 - 18:27 #43
Bare lige for at være sikker. Den første bat-fil giver filer med samme navn fortløbende numre.

Den anden bat-fil overskriver ikke eksisterende filer - er ikke helt med på hvad du mener!

Er der et af bat-filerne som, hvis der er findes flere filer med samme navn,  kun kopieres en fil?
Avatar billede bertelbrander Novice
02. september 2003 - 19:51 #44
Den sidste bat-fil kopierer kun en fil hvis der er flere der har samme navn.

(Formuleringen: "En version der ikke overskriver eksisterende filer" er noget sludder, ingen af bat-filerne overskriver filer.)
Avatar billede nph12 Nybegynder
02. september 2003 - 20:58 #45
Nu er jeg med :-) Jeg prøver lige de to bat-filer imorgen.
Avatar billede nph12 Nybegynder
03. september 2003 - 21:47 #46
Bare for at besværlig, kunne man ikke samle det to bat-filer til et bat-fil? Kan man ikke gøre det sådan, at man ikke behøver at kalde bat-filen ude fra cmd, bare køre bat-filen og indtaste de oplysninger der skal bruges:

Source
Destination
Giver filer med samme navn fortløbende numre
Kopierer kun en fil hvis der er flere der har samme navn
samt valg af de ekstensions man vil bruge

Det er kun hvis du har tid og lyst, for ellers kan jeg sagtens bruge de bat-filer du allerede har lavet.
Avatar billede bertelbrander Novice
03. september 2003 - 23:25 #47
@echo off
setlocal
set /P SourcePath="Enter source path: "
set /P DestPath="Enter destination path: "
if not exist %DestPath:"=%\. call :CheckDest
if not exist %DestPath:"=%\. goto :EOF
set /P Renumber="Should files with same name be numbered: "

:Next
set Ext=
set /P Ext="Enter extension (Enter to quit): "
if [%Ext%]==[] goto :eof
call :Process %ext%
goto :Next

:Process
for /F "delims=;" %%A  in ('dir /B /S /A-D %SourcePath:"=%\%1') do call :CopyIt "%%~dpA" "%%~nA" "%%~xA"
goto :eof

:CopyIt
if [%Renumber%]==[n] goto NoRenumber
set xxx=
:TryAgain
if exist %DestPath:"=%\%~2%xxx%%~3 set /A xxx+=1&goto TryAgain
copy %~1%~2%~3 %DestPath:"=%\%~2%xxx%%~3 >nul 2>&1
goto :eof

:NoRenumber
if exist %DestPath:"=%\%~2%~3 goto :eof
copy %~1%~2%~3 %DestPath:"=%\%~2%~3 >nul 2>&1
goto :eof

:CheckDest
set /P Answer=%DestPath:"=% Does not exist, do you want to create it?
if [%Answer%]==[n] (
  echo I can't copy any files then!
  Goto :eof
) else (
  MD %DestPath:"=%
  if not exist %DestPath:"=%\. echo Failed to Create %DestPath:"=%
)
Avatar billede nph12 Nybegynder
04. september 2003 - 16:28 #48
Ja, lige noget i den stil. Jeg har et lille problem, jeg kan ikke for bat-filen til at køre. Jeg ved ikke, hvad jeg gør forkert.

Ud for "Should files with same name be numbered" skriver man enten yes eller no,ik´?

Kunne man ikke gøre det sådan, at man vælger et af disse to muligheder, ved at taste 1 eller 2.

1)Giver filer med samme navn fortløbende numre
2)Kopierer kun en fil hvis der er flere der har samme navn

Ved extension kan man stadigvæk bruge flere f.eks. *.gif og *.jpg samtidigt?
Avatar billede bertelbrander Novice
04. september 2003 - 17:55 #49
Hvad mener du med at den ikke vil køre?

Ud for "Should files with same name be numbered" skriver man n hvis man ikke ønsker at give filer der hedder det samme fortløbende numre, og noget andet ellers.
Jeg kan godt lave det som valg mellem 1 og 2.

Den kører i en løkke og spørger efter extension, så skriver du EN ektension (f.ex *.jpg) og trykker enter, så kopierer den alle jpg-file og spørger igen, hvorpå du skriver *.gif, osv. Til slut trykker du blot på enter for at få den til at stoppe.
Avatar billede nph12 Nybegynder
04. september 2003 - 19:42 #50
Nu har jeg fået det til at køre. Nu når du alligevel skal rette i bat-filen, kan du så lave en tekst der siger "kopiere filer", når bat-filen begynder at kopiere. Evt. tilføje en log-fil.

Hvad kan man med extension? Sortere efter filtyper og ....? Kan man sortere efter størrelse?
Avatar billede bertelbrander Novice
04. september 2003 - 21:12 #51
Jeg har ændret indtastning af valg som foreslået.
Nu udskriver den hvad der kopieres f.ex "Copying .\*.txt to d:\ll" og antallet af filer der er kopieret.
Man kan godt lave en logfil med f.ex en liste over hvad der kopieret og resultatet.
Man kan godt kopiere filer der er over/under en eller anden størrelse, ældre/yngre end en dato, gemt på en lørdag, lavet en bestemt tidspunkt på dagen, osv.
Men hvis det er det du ønsker synes jeg at du selv skal begynde at kode lidt, så skal jeg nok hjælpe hvis du har problemer.

@echo off
setlocal
set /P SourcePath="Enter source path: "
set /P DestPath="Enter destination path: "
if not exist %DestPath:"=%\. call :CheckDest
if not exist %DestPath:"=%\. goto :EOF

set Renumber=
:select
echo Select what to do with files with the same name
echo 1 to append consecutive numbers
echo 2 to ignore
set /P Renumber="Select> "
if {%renumber%}=={1} goto :next
if {%renumber%}=={2} goto :next
goto :select

:Next
set Ext=
set NumFiles=0
set /P Ext="Enter extension (Enter to quit): "
if [%Ext%]==[] goto :eof
echo Copying %SourcePath%\%ext% to %DestPath%
call :Process %ext%
echo Copied %NumFiles% files
goto :Next

:Process
for /F "delims=;" %%A  in ('dir /B /S /A-D %SourcePath:"=%\%1') do call :CopyIt "%%~dpA" "%%~nA" "%%~xA"
goto :eof

:CopyIt
if [%Renumber%]==[n] goto NoRenumber
set xxx=
:TryAgain
if exist %DestPath:"=%\%~2%xxx%%~3 set /A xxx+=1&goto TryAgain
for /F %%A in ('copy %~1%~2%~3 %DestPath:"=%\%~2%xxx%%~3') do set /A NumFiles+=%%A
goto :eof

:NoRenumber
if exist %DestPath:"=%\%~2%~3 goto :eof
for /F %%A in ('copy %~1%~2%~3 %DestPath:"=%\%~2%~3') do set /A NumFiles+=%%A
goto :eof

:CheckDest
set /P Answer=%DestPath:"=% Does not exist, do you want to create it?
if [%Answer%]==[n] (
  echo I can't copy any files then!
  Goto :eof
) else (
  MD %DestPath:"=%
  if not exist %DestPath:"=%\. echo Failed to Create %DestPath:"=%
)
Avatar billede nph12 Nybegynder
05. september 2003 - 20:34 #52
Jeg tror det som driller engang imellem er, hvordan jeg skal indtaste source path og destination path. Er det bare drevangivelse, kan jeg pege på en mappe og skal jeg bruge ""?

Jeg tror, hvis der skal laves log-fil eller andet andet på denne bat-fil, må du meget gerne lave det, da jeg ikke helt er inde i hvordan du gør.

Jeg vil meget gerne lave lidt kode, så kan du ikke lige gennemgå bat-fil, hvad de forskellige kommandoer gør og hvordan du har bygget det op!

Jeg har faktisk ikke tid til at skrive nu her, da jeg har lektier op over begge ører, men kunne vi ikke aftale om ca. 2 uger, (skulle være færdig med de fleste opgaver) at du hjælpe mig med at lave en bat-fil?

Bare en simpel bat-fil, så jeg lærer det grundlæggende og derefter kan bygge lidt mere på. F.eks. kunne det bare være en bat-fil som kopiere fra en mappe til en anden.
Avatar billede bertelbrander Novice
05. september 2003 - 20:45 #53
Som source og destination kan du bruge:
c:\
c:\whatever
\bar
..\..\foo
.
Du skal bruge "" hvis der er mellemrum i stien.

Jeg foreslår at du lukker dette spørgsmål, og opretter et nyt når du får tid til at kikke på bat-fil programering igen og har spørgsmål til dette.
Avatar billede nph12 Nybegynder
05. september 2003 - 21:53 #54
Der er et eller andet i vejen. Når jeg bruger "", når der er mellemrum i stien, finder bat-filen ingen filer.

Når jeg bare vælger et drevangivelse, så kopiere bat-fil mindre filer over end der er i den ene mappe - det kan ikke være rigtigt!

Når jeg angiver et drev-bogstav, så kopiere bat-filen fra alle undermapper, ik´?

Ellers er det ved at være lukketid, så dem som vil have point, må oprette et svar!

Når jeg opretter et nyt spørgsmål, linker jeg lige over til det!
Avatar billede bertelbrander Novice
06. september 2003 - 00:29 #55
Det var et par fejl der gjorde at det ikke virkede med "", disse skulle være løst nu. (Mellemrum i stier og filnavne er "a pain in the arse" når man laver bat-scripts.)
Når man kopierer et helt drev skal det angives som x: (og ikke x:\)

@echo off
setlocal
set /P SourcePath="Enter source path: "
set /P DestPath="Enter destination path: "
if not exist "%DestPath:"=%\." call :CheckDest
if not exist "%DestPath:"=%\." goto :EOF

set Renumber=
:select
echo Select what to do with files with the same name
echo 1 to append consecutive numbers
echo 2 to ignore
set /P Renumber="Select> "
if {%renumber%}=={1} goto :next
if {%renumber%}=={2} goto :next
goto :select

:Next
set Ext=
set NumFiles=0
set /P Ext="Enter extension (Enter to quit): "
if [%Ext%]==[] goto :eof
echo Copying "%SourcePath:"=%\%ext%" to %DestPath%
call :Process %ext%
echo Copied %NumFiles% files
goto :Next

:Process
for /F "delims=;" %%A  in ('dir /B /S /A-D "%SourcePath:"=%\%1"') do call :CopyIt "%%~dpA" "%%~nA" "%%~xA"
goto :eof

:CopyIt
if [%Renumber%]==[n] goto NoRenumber
set xxx=
:TryAgain
if exist "%DestPath:"=%\%~2%xxx%%~3" set /A xxx+=1&goto TryAgain
for /F %%A in ('copy "%~1%~2%~3" "%DestPath:"=%\%~2%xxx%%~3"') do (
  if [%%A]==[0] echo Failed to copy "%~1%~2%~3" to "%DestPath:"=%\%~2%xxx%%~3"
  set /A NumFiles+=%%A
)

goto :eof

:NoRenumber
if exist "%DestPath:"=%\%~2%~3" goto :eof
for /F %%A in ('copy "%~1%~2%~3" "%DestPath:"=%\%~2%~3"') do (
  if [%%A]==[0] echo Failed to copy "%~1%~2%~3" to "%DestPath:"=%\%~2%~3"
  set /A NumFiles+=%%A
)
goto :eof

:CheckDest
set /P Answer=%DestPath:"=% Does not exist, do you want to create it?
if [%Answer%]==[n] (
  echo I can't copy any files then!
  Goto :eof
) else (
  MD %DestPath%
  if not exist "%DestPath:"=%\." echo Failed to Create %DestPath:"=%
)
Avatar billede nph12 Nybegynder
06. september 2003 - 11:56 #56
bertelbrander<<Kan du ikke oprette et svar, så du kan få nogle point?

Ja, det virker lidt bedre :-)

Nu har jeg fået kopieret alle filerne over i en ny mappe, men til min store overraskelse, se jeg at der er en del filer som er de samme (f.eks. billede.jpg, men der er også en fil som hedder billede1.jpg). Hvad gør jeg?

Desværre har jeg slettet de mapper som billeder lå i, da jeg ellers ikke havde plads på min harddisk.

Kan man ikke få bat-filen til sortere nogen at disse filer fra? Filerne er jo de samme og hedder næsten det samme.

Kan du ikke bare skrive, hvad jeg skal og hvor jeg evt. skal rette i bat-filen.
Avatar billede bertelbrander Novice
06. september 2003 - 14:25 #57
Jeg har lavet et lille script der sammenligner alle filer i den mappe det er startet fra.
Som det er nu udskriver det hvilke filer der er de samme, bemærk at alle filer vil blive sammelignet to gange, så der vil komme til at stå at bip.jpg er det samme som bip2.jpg og at bip2.jpg er det sammme som bip.jpg.
Hvis din windows ikke er en engelsk win2k skal du måske udskifte strengen efter findstr til det, din version af fc udskriver når den har sammenlignet to ens filer.
Når du har set at scriptet kører som det skal (dvs korrekt fortæller hvilke filer der er de samme) kan du tilføje en del %1 i bunden.
Det tager temmelig lang tid at lave sammenligningen.
Jeg forsøger, så vidt det er muligt, at undgå at få point.

@echo off
for %%A in (*) do call :First "%%A" %%~zA
goto :eof

:First
for %%A in (*) do call :compare "%%A" %1 %%~zA %2
goto:eof

:compare
if [%1]==[%2] goto :eof
if NOT [%3]==[%4] goto :eof
fc /B %1 %2 |findstr "no differences encountered" >nul
if errorlevel 1 goto :eof
echo %1 and %2 is the same file
Avatar billede nph12 Nybegynder
06. september 2003 - 20:14 #58
Jeg kører win2k DK.

Skal jeg bare sætte det sidste kode ind i bunden af bat-filen? Ellers prøver jeg at kigge på det i morgen.

Ved at skrive help fc får jeg dette:

Sammenligner to filer eller s‘t af filer og viser forskellene
mellem dem.


FC [/A] [/C] [/L] [/LBn] [/N] [/T] [/U] [/W] [/nnnn] [drev1:][sti1]filnavn1
          [drev2:][sti2]filnavn2
FC /B [drev1:][sti1]filnavn1 [drev2:][sti2]filnavn2

  /A    Viser kun f›rste og sidste linje for hvert omr†de med forskelle.
  /B    Foretager bin‘r sammenligning.
  /C    Skelner IKKE mellem store og sm† bogstaver.
  /L    Sammenligner filer som ASCII-tekst.
  /LBn  Angiver det maksimale antal sammenh‘ngende
          uoverensstemmelser til det angivne antal linjer.
  /N:    Viser linjenumrene ved ASCII-sammenligning.
  /T    Udvider ikke tabulatorer til mellemrum.
  /U    Sammenligner filer som UNICODE-tekstfiler.
  /W    Komprimerer blanktegn (mellemrum og tabulatorer) for
          sammenligning.  /nnnn  Angiver antallet af sammenh‘ngende linjer,
          der skal passe efter en uoverensstemmelse.
Avatar billede bertelbrander Novice
06. september 2003 - 23:37 #59
Den seneste kode skal køre for sig selv i sin egen fil.
For at få det til at virke på en dansk win2k skal du have to filer der er helt ens og så køre "fc /B  fil.1 fil.2" og studere output.
På min PC skriver den:
Comparing files fil.1 and fil.2
FC: no differences encountered
Det du skal bruge er det den skriver efter FC: i sidste linie, det putter du ind efter findstr inden for et sæt ""
Avatar billede nph12 Nybegynder
07. september 2003 - 11:16 #60
Okay, hvis du bertelbrander helst vil undgå point, så deler jeg pointene mellem de to andre bruger.

Det er hvad jeg får af output med to forskellige filer:
Sammenligner filerne Ny.txt og NY2.TXT
FC: NY2.TXT er l‘ngere end Ny.txt

Det er hvad jeg får af output med to ens filer:
Sammenligner filerne Ny.txt og NY2.TXT
FC: Ingen forskelle fundet

Jeg er ikke helt med, hvad jeg skal med det sidste stykke kode. Skal den til tilføjes til den første bat-fil?
Avatar billede bertelbrander Novice
07. september 2003 - 13:52 #61
Du skal erstatte "no differences encountered" i scriptet med "Ingen forskelle fundet".

Det sidste stykke kode er en selvstændig bat-fil der skal puttes i sin egen fil, og har intet med det første script at gøre.
Avatar billede nph12 Nybegynder
07. september 2003 - 15:43 #62
Okay, jeg retter "no differences encountered" til "Ingen forskelle fundet".

Hvis den sidste kode, skal puttes i sin egen fil, så forstår jeg ikke hvordan jeg skal bruge den?

Kan man ikke integrere den sidste kode i vores bat-fil?

Jeg tænkte på, om vi ikke kunne bygge en bat-fil op fra starten? Så kunne du lave mig lidt om opbygget af et script og hvordan de forskellige kommandoer virker.

Idéer har jeg nok af, så det bliver ikke kedeligt. Det kunne også være dejligt at jeg selv kunne lave nogen bat-filer.

Jeg vidste ikke, at der er så mange muligheder med bat-filer.

Jeg tænker lige over, hvad jeg der kunne være gode idéer til en ny bat-fil. Så må du lige sige, om det er noget som er muligt at lave.
Avatar billede bertelbrander Novice
07. september 2003 - 23:41 #63
Du bruger den sidste kode ved at kalde det i den mappe hvorfra du vil have fjernet dubletter. Der skal ikke angives parametre.
Man kan godt kombinere de to scripts, det kunne være en øvelse når du har fået lidt mere styr på bat programmering, indtil da vil jeg foreslå at vi beholder de to scripts seperat (så slipper jeg for arbejdet :-)).

Du kunne starte med at lave en bat fil der beregner hvor mange bytes der er i en mappe, uden at bruge dir.

Så kunne du lave et script der beregner hvor mange bytes der hver mappe på C: og laver en sorteret liste.

Du kan også øve dig med at lave et script der sletter filer der er mere end x dage gamle.

Eller lave et backup/restore script.

Eller et lille spil.

Men det ville måske være en ide at lave et nyt spørgsmål, det kunne tænkes at der var nye der ville med og det tager mit modem over et minut at loade denne side.
Avatar billede nph12 Nybegynder
08. september 2003 - 18:16 #64
Bare vi på et tidspunkt kombinere de to script er det fint. Det kan være at jeg får så meget øvelse, at jeg selv kan gøre det på et tidspunkt.

Jeg synes, at det er nogen gode forslag til bat-programmering. Lad os tage dem alle sammen (jeg ved ikke lige det med at lave spil).

Jeg har oprettet et nyt spørsmål:
http://www.eksperten.dk/spm/398456
Avatar billede nph12 Nybegynder
09. september 2003 - 22:38 #65
Jeg har fået det til at køre. Nu har det sidste batch-script kørt i et par timer og får lov til at køre færdig. Batch-scriptet finder alle ens filer, men ellers gør det ikke noget? Skal den ikke slette filen, hvis der findes en i forvejen?
Avatar billede bertelbrander Novice
09. september 2003 - 23:23 #66
Som jeg skrev 06/09-2003 14:25:26 :

"Når du har set at scriptet kører som det skal (dvs korrekt fortæller hvilke filer der er de samme) kan du tilføje en del %1 i bunden."
Avatar billede nph12 Nybegynder
10. september 2003 - 22:40 #67
Jeg har tilføjet del %1 i bunden af scriptet, men synes ikke at scriptet sletter, hvis der findes to af samme fil. Har jeg gjort noget forkert?

@echo off
for %%A in (*) do call :First "%%A" %%~zA
goto :eof

:First
for %%A in (*) do call :compare "%%A" %1 %%~zA %2
goto:eof

:compare
if [%1]==[%2] goto :eof
if NOT [%3]==[%4] goto :eof
fc /B %1 %2 |findstr "no differences encountered" >nul
if errorlevel 1 goto :eof
echo %1 and %2 is the same file
del %1
Avatar billede bertelbrander Novice
10. september 2003 - 22:59 #68
07/09-2003 13:52:00 skrev jeg:
Du skal erstatte "no differences encountered" i scriptet med "Ingen forskelle fundet".
Når du tester er det altid en god ide at teste på nogle kendte filer (nogle få). Du kan fjerne @echo off i toppen, så vil den skrive kommandoerne inden den udfører dem. I dette tilfælde kan du også prøve at fjerne >nul i linien med fc, og/eller lave en extra linie med:
fc /B %1 %2
inden den der nu, så kan du se outputtet fra fc.
Avatar billede nph12 Nybegynder
11. september 2003 - 19:16 #69
Du mener sådan? Den sletter i hvert fald nu, når der er to ens filer.

for %%A in (*) do call :First "%%A" %%~zA
goto :eof

:First
for %%A in (*) do call :compare "%%A" %1 %%~zA %2
goto:eof

:compare
if [%1]==[%2] goto :eof
if NOT [%3]==[%4] goto :eof
fc /B %1 %2 |findstr "Ingen forskelle fundet"
fc /B %1 %2
if errorlevel 1 goto :eof
echo %1 and %2 is the same file
del %1
Avatar billede bertelbrander Novice
11. september 2003 - 20:25 #70
Ja, det ser fint ud.
Avatar billede nph12 Nybegynder
13. september 2003 - 10:59 #71
Det tager god nok mange timer. Kan man ikke få scriptet til at køre hurtigere, ved først finde alle de filer som har samme størrelse og derefter sammenligne de filer, som har samme størrelse om de er ens (og slette dem som er ens)?
Avatar billede bertelbrander Novice
13. september 2003 - 13:11 #72
Der er flere måder man kan gøre det hurtigere, men scriptet bliver let meget kompliceret.
Man kunne lave en fil med alle filer og deres størrelse vha:
for %%I in (*) do echo %%~zI %%I >>list.txt
Derefter kunne man sortere filerne i list.txt filen efter størrelse vha kommandoen sort.
Så kunne læse text-filen og sammenligne de filer der har samme størrelse.

Det er også muligt at man kan lave scriptet hurtigere ved at udføre de to første if i funktionen :compare inden man kalder funktionen, derved ville man undgå en række funktionskald. For løkken vil så komme til at se ca. sådan ud (utestet):
for %%A in (*) do if not [%%A]==[%1] do if not [%%~zA]==[%2] call :compare "%%A" %1

Så kunne man fjerne de to første linier i :compare funktionen
Avatar billede nph12 Nybegynder
15. september 2003 - 14:40 #73
Jeg har oprettet et nyt spørgsmål:
http://www.eksperten.dk/spm/401308
Avatar billede minau Nybegynder
20. februar 2004 - 02:29 #74
Hej

måske kunne i også hjælpe her :-) http://www.eksperten.dk/spm/467711
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