Copierea mai multor subdosare într-o locație nouă cu același aspect (XP DOS)

Bine, totul aici la stackoverflow

Am vizitat frecvent acest site și întotdeauna am găsit ceea ce căutam. Din păcate, cred că sunt puțin peste cap în privința asta. Așa că mi-am făcut un cont și sper că voi, băieți, fie îmi veți spune că este posibil și cum, fie îmi spuneți că sunt nebun și voi merge mai departe. =]

Deci iată ce vreau să fac, am un computer vechi cu mai mulți utilizatori care se conectează la el. Am un computer nou acum și am vrut să copiez articolele desktop și articolele favorite ale utilizatorilor pe un server la distanță, astfel încât să le pot copia înapoi odată ce noul computer este configurat. Sistemul actual este XP, iar cel nou va fi win7.

Caut să finalizez acest lucru folosind comenzi DOS într-un fișier batch. Am un fundal de programare, dar mă confrunt cu erori și CMD.exe nu este cel mai bun mediu de programare pentru depanare. Asta am pana acum,

 FOR /R "C:\Documents and Settings\" %%G in (.) DO (
  Pushd %%G
  FOR /f %%D in (%%G\Desktop) do (
   if exist %%D\*.* COPY 
   %%D\*.* "D:Users\%%G\Desktop")
  FOR /f %%F in (%%G\Favorites) do (
   if exist %%F\*.* COPY 
   %%F\*.* "D:Users\%%G\Favorites")
 Popd )

Speram că codul de mai sus va trece prin fiecare folder al utilizatorilor (găsit în documente și setări) și va copia subfolderele „Desktop” și „Favorite” pe un server la distanță cu același aspect. În acest moment primesc erori care spun că sistemul nu poate găsi fișierele. Cu toate acestea, pur și simplu înlocuind buclele 2 for cu comenzi echo, îmi va spune că a trecut corect prin fiecare subfolder de utilizator. Apoi, fiecare buclă for va copia lucruri dintr-un singur folder într-un alt dosar unic. Dar când încerc să le combin, nu reușește.

Dacă există o modalitate mai ușoară de a copia 2 subfoldere din fiecare folder de utilizator într-o locație nouă și de a le păstra ca subfoldere ale fiecărui folder de utilizator, nu am niciun motiv că trebuie făcută într-un fișier batch. Pur și simplu nu am timp să parcurg manual fiecare folder. Copiați Desktop și Favorite, treceți la serverul de la distanță, creați acel folder de utilizator, lipiți desktopul și favoritele și repetați pentru peste 20 de utilizatori. Unii dintre utilizatori sunt mult mai mari decât alții, iar mutarea manuală a acestora poate dura câteva ore.

Acesta a fost primul meu post aici, sper că a fost concis și clar.

Vă mulțumesc tuturor anticipat, am primit deja atât de mult ajutor de la acest site înainte de a avea acest cont.


person BlazzedTroll    schedule 03.05.2013    source sursă
comment
D:Users? Este doar o greșeală pe care ați făcut-o când ați tastat aici sau este în scriptul în sine?   -  person user2033427    schedule 03.05.2013
comment
Doar o greșeală la tastare aici. Mi-am verificat scripturile pentru orice erori de tip.   -  person BlazzedTroll    schedule 03.05.2013


Răspunsuri (1)


FOR /R "C:\Documents and Settings\" %%G in (.) DO ( va parcurge fiecare folder (și subfolder) din "C:\Documents and Settings\", dar acest script va trata apoi fiecare subfolder ca un folder al utilizatorului și va încerca să copieze desktopul și favoritele din acesta, ceea ce probabil nu este ceea ce doriți. Cele două bucle for din cod nu sunt chiar necesare.

Următorul cod folosește for /d. copy nu este cu adevărat un instrument bun de utilizat, deoarece nu copiază folderele și ar trebui folosite alte utilitare. Astfel, acest cod copiază doar fișierele care se află în folderul principal și nu în niciun subfolder.

 for /d %%G in ("C:\Documents and Settings\") do (
  if exist %%G\Desktop\*.* (
   copy %%G\Desktop\*.* "D:\Users\%%~nxG\Desktop"))
  if exist %%G\Favorites\*.* (
   copy %%G\Favorites\*.* "D:\Users\%%~nxG\Favorites"))
 )

Deoarece %%G conține calea absolută, %%~nxG trebuie să obțină doar numele și extensia folderului (doar în cazul în care numele are un caracter . în el), astfel încât "D:\Users\%%~nxG\Desktop" să funcționeze. pushd și popd nu sunt, de asemenea, necesare deoarece %%G conține calea absolută în acest cod.

person user2033427    schedule 03.05.2013
comment
Probabil că există foldere pe desktop, așa că xcopy sau mai bine Robocopy s-ar potrivi pentru oglindirea desktopului etc. - person foxidrive; 03.05.2013
comment
Nu pot vota comentariul tău user2033427 dar mulțumesc! Căutam ceva de genul %%~nxG pentru că știam că %%G citea doar primul șir și unele nume de foldere au un . sau mai multe spații. Văd că o mare parte din codul pe care îl aveam nu era necesar, dar nu văd codul necesar. Așa că voi folosi răspunsul tău împreună cu sugestia foxidrive și voi vedea ce pot veni cu. - person BlazzedTroll; 03.05.2013
comment
Deci, deoarece sunt pe XP pentru moment, copia robustă a fișierului nu va funcționa încă. Dar xcopy pare a fi cel mai bun pentru acest scenariu. folosind xcopy cu opțiunea /EXCLUDE poate schimba aceasta la o singură linie. Tot ce trebuie să fac este să spun că exclud folderele precum [Documentele mele] [Setări locale] etc. și va face o copie a întregului director oriunde voi specifica. Pot folosi chiar și opțiunea /Z, deoarece voi copia pe un server la distanță pentru a mă asigura că nicio deconectare temporară nu pune capăt procedurii de copiere. Mulțumesc tuturor pentru ajutor. ar fi trebuit să se uite mai profund în xcopy. Nu am știut niciodată că are /Exclude - person BlazzedTroll; 03.05.2013
comment
Ar trebui să-l poți marca în continuare ca acceptat :) Mi-a fost prea somn noaptea trecută, dar mă gândeam la o buclă for /d /r care să găsească toate folderele și subfolderele, apoi să facă directorul corespunzător pe cealaltă unitate și apoi să copieze fișierele peste cu copy. - person user2033427; 04.05.2013