@PuMaH: Får erkänna att jag inte helt förstår vad du vill åstadkomma, men kodsnutten du har hittat hoppar först till :Method1
5 gånger (och gör samma sak varje gång), och när den är klar faller den igenom och passerar det stycket en gång extra (så totalt försöker den köra nästa loop 6 gånger, för att undvika det behövs en extra goto efter din första loop). Nästa loop borde inte fungera alls, gissar att du får ett felmeddelande om just det, och antingen bör du ha kommandot på samma rad direkt efter DO
, eller omge de rader som ska köras med parenteser:
FOR /D %%A in ("C:\Temp1\*") DO ECHO %%A
FOR /D %%A in ("C:\Temp1\*") DO (
ECHO %%A
)
För att minska på allt brus kan du inleda ditt script med @ECHO OFF
eller placera ett @
framför de kommandon du inte vill skriva ut som de är till terminalen. Exemplet nedan kommer bara skriva ut filnamnen i C:\Temp1
:
@ECHO OFF
FOR /D %%A in ("C:\Temp1\*") DO ECHO %%A
@FOR /D %%A in ("C:\Temp1\*") DO @ECHO %%A
Förstår dock inte riktigt syftet med att anropa xcopy så, annat än att du vill ha alla mappar (men inga filer?) kopierade från en mallstruktur till en ny destination? Det vore lättare att använda PowerShell än att scripta för mycket i Batch, det har funnits med Windows sedan XP och man bör försöka lösa sådana här problem med det hellre än gamla Batch nuförtiden.
Här är ett exempel som kanske gör vad du behöver. Det listar först alla mappar i din källa (.\Template\ i exemplet), sedan kopierar det varje mapp och inkluderar dess innehåll (men bara mappar) till destinationen (.\Target\ i exemplet). (Parametern -WhatIf gör att Copy-If skriver ut en beskrivning av operationen istället för att faktiskt göra något, ta bort den för att köra koden).
Get-ChildItem -Path .\Template\ -Directory | %{
Copy-Item -Path $_.FullName -Destination .\Target\ -Filter {PSIsContainer} -Recurse -WhatIf
}
Källa:
Template
├─ A
│ ├─ D
│ ├─ E
│ └─ Text.txt
├─ B
└─ C
Destination före:
Target
└─ <tom>
Destination efter:
Target
├─ A
│ ├─ D
│ └─ E
├─ B
└─ C
Alternativt, med bara xcopy (som går att anropa från både Batch och PS):
XCOPY "C:\Template" "C:\Target" /E /T