AMcoder - javascript, python, java, html, php, sql

Օգտագործելով խմբաքանակի սցենար՝ 2 թղթապանակների բովանդակությունը ռեկուրսիվորեն համեմատելու և տարբերությունը երրորդ թղթապանակում պատճենելու համար

Ես ունեմ այս սցենարին համապատասխան 3 թղթապանակ:

Թղթապանակ 1 - պարունակում է բոլոր առկա պատկերները (PNG), որոնք տեսակավորված են ՄԻԱՅՆ ենթագրքերով, որոնք կազմում են հազարավոր առանձին ֆայլեր: Արմատային թղթապանակում չկա:

Թղթապանակ 2 - նոր ստացված պատկերներ՝ բոլորը արմատային պանակում: Ես կարծում եմ, որ կարևոր չէ բացատրել, թե ինչպես են դրանք ձեռք բերվում, ի տարբերություն այն փաստի, որ կլինեն կրկնօրինակ ֆայլերի և նոր ֆայլերի խառնուրդ:

Թղթապանակ 3 - դատարկ թղթապանակ:


Քանի որ 1-ին թղթապանակն ունի ամենաշատ ֆայլերը, ես պետք է ստուգեմ թղթապանակ 2-ի բոլոր ֆայլերը թղթապանակ 1-ի ամեն ինչում ռեկուրսիվ, (և ոչ հակառակը, կատարողականի նկատառումներով), այնուհետև պատճենեմ: /տեղափոխեք այն, ինչ նոր է թղթապանակ 3 (այս կերպ ես կարող եմ ձեռքով մաղել և համապատասխանաբար դասավորել դրանք):

Համեմատությունը կարող է կատարվել զուտ ֆայլի անվան հիման վրա:

Ես լայնորեն նայեցի ֆորումներում և գտա միայն 1 սցենար, որն աշխատում է լավագույնս, բայց հիմնված է երկու թղթապանակների վրա, որոնք չունեն ենթագրքեր:

Իմ խնդիրն այն է, որ ես կարծես թե չեմ կարողանում այն ​​համեմատել ֆայլերը թղթապանակ 1-ի հետ ռեկուրսիվ կերպով: Այն ավարտվում է պարզապես 2-րդ պանակի ամեն ինչ պատճենելով 3-րդ թղթապանակում, քանի որ այն ստուգում է թղթապանակ 1-ի արմատային թղթապանակը, որը պարունակում է ոչ այլ ինչ, քան ենթագրքեր:

Խնդիրի կոդը՝

@echo off
set "Folder1=Folder1"
set "Folder2=Folder2"
set "Folder3=Folder3"

for /f "delims=" %%F in ('dir /b "%folder2%"') do (
    if not exist "%folder1%\%%F" copy "%folder2%\%%F" "%folder3%" && echo Copied "%%F"
    )
pause
Exit

Վերոնշյալ կոդի վարքագիծը՝

Անցնում է 2-րդ թղթապանակի յուրաքանչյուր ֆայլ, և եթե 1-ին թղթապանակում նույն անունով ֆայլ գոյություն չունի (միայն արմատական ​​պանակը), այն պատճենելու է այն 3-րդ թղթապանակում:


Ես կցանկանայի, որ այն ռեկուրսիվ կերպով ստուգի թղթապանակ 1-ի բովանդակությունը, ոչ միայն արմատային թղթապանակը:

Ես փորձել եմ այն ​​ուղղել բազմաթիվ ձևերով, օրինակ՝ փոխել IN-ը NOT IN-ի կամ փորձել ինչ-որ բան գտնել, որպեսզի "%folder1%\%%F"-ն ունենա ռեկուրսիվ պարամետր, ինչպիսին "%folder1%\..\%%F"ն է, բայց իմ սահմանափակ գիտելիքներով ոչինչ չի ստացվել:

Ցանկալի է, որ ես կցանկանայի, որ ամբողջ գործընթացը կատարվեր միայն 1 սցենարով:

Կանխավ շնորհակալություն ձեր օգնության համար: Խնդրում եմ տեղեկացնել ինձ, եթե որևէ բանի վերաբերյալ լրացուցիչ պարզաբանումներ են անհրաժեշտ:

14.08.2019

  • Ձեր կոդը կարծես փորձում է պատճենել և՛ ֆայլերը, և՛ գրացուցակները, (չնայած copy-ը չի պատճենում դիրեկտորիաները, միայն դրանց ներսում գտնվող ֆայլերը), և դուք ստուգում եք միայն Folder1-ի արմատում գտնվողների համար: , (որոնք դուք արդեն նշել եք, որ դասավորված են ենթագրքերով), ոչ թե դրա ենթացանցերի կառուցվածքում: BTW, կարո՞ղ եք չօգտագործել ռոբոպատճեն՝ /E կամ /S-ով և դրա /XC, /XN և /XO տարբերակներից մեկ կամ մի քանիսով, < i>(և, հնարավոր է, դրա /FFT տարբերակը): 14.08.2019

Պատասխանները:


1

if [not] exist-ն աշխատում է միայն այն դեպքում, եթե դրան տալիս ես ամբողջ ճանապարհը (ինչը չես կարող, քանի որ չգիտես, եթե դա լինի): Այսպիսով, այս մոտեցումը ձեզ չի օգնում:

Փոխարենը դուք կարող եք կատարել dir /s /b "%folder1%\%%F" || copy ...., բայց դա նշանակում է, որ դուք պետք է կատարեք dir ռեկուրսիվ dir յուրաքանչյուր ֆայլի համար folder2-ում, դա այն չէ, ինչ ես կանվանեի կատարում:

Ավելի լավ է ստեղծեք տեքստային ֆայլ folder1 ֆայլերով և օգտագործեք այն որպես հղում: (%%~nxA թվարկում է միայն ֆայլերի name և exլարումը):

@echo off
set "Folder1=Folder1"
set "Folder2=Folder2"
set "Folder3=Folder3"

>Folder1Files.txt (for /r "%folder1%" %%A in (*) do echo %%~nxA)

for %%F in ("%folder2%\*") do (
  findstr /x "%%~nxF" Folder1Files.txt >nul || copy "%%F" "%folder3%\" && echo Copied "%%F"
    )
pause
Exit /b

(դատելով ձեր աշխատանքային հոսքի նկարագրությունից, հաշվի առեք move-ը՝ copy-ի փոխարեն)

14.08.2019
  • Դա հրաշալի է աշխատել: Շնորհակալ եմ նաև այդ բոլոր բացատրությունների համար: 15.08.2019
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..