Soru Bir klasörden ve alt klasörden ilk 10 dosyayı kopyalayın


Çok iç içe geçmiş bir dosyadan ilk (herhangi) 10 dosyayı almaya çalışıyorum. kullanabilirim XCOPY source dest /T /E klasör yapısını oluşturmak için, ancak yapmak istediğim, her klasörden ve alt klasörden 10 dosya almak ve bunları da kopyalamak.

Bunu benim için yapacak bir araç var mı?


6
2018-02-18 12:26


Menşei


Onaylamak için, sadece ilk 10 dosyayı istediğiniz sayıda dosya içeren bir klasör yapısından almak ister misiniz? - Cocowalla
Evet bu doğru. - Rob White


Cevaplar:


Sorunuz, ilk 10 dosyanın her Alt klasör? Bunun yapılması gerekiyor (aşırı test edilmemiştir!):

echo off
xcopy /Y %1 %2 /T /E

dir %1 /b /s /A:D >tempfolderlist.txt

for /f "tokens=1 delims=¬" %%a in (./tempfolderlist.txt) do (

    dir "%%a" /b /A:-D >tempfilelist.txt

    setlocal enabledelayedexpansion

    set counter=0

    for /f "tokens=1 delims=¬" %%b in (./tempfilelist.txt) do (

        IF !counter! LSS 10 call :docopy %1 "%%a\%%b" %2
        set /a counter+=1

    )

    endlocal
)

del /q tempfolderlist.txt
del /q tempfilelist.txt
GOTO:EOF

:docopy
set sourcePath=%~1
set sourceFile=%~2
set targetPath=%~3
set sourceNoDrive=%sourceFile:~3,5000%
set sourcePathNoDrive=%sourcePath:~3,5000%
set sourceNoDrive=!sourceNoDrive:%sourcePathNoDrive%\=!

copy "%sourceFile%" "%targetPath%\%sourceNoDrive%" >> out.txt

GOTO:EOF

'First10.cmd' adlı bir toplu iş dosyasına kaydedilmişse, bunu şu şekilde kullanabilirsiniz:

first10.cmd "C:\Temp\SourcePath" "C:\Temp\DestPath"

İlk önce, xcopy kullanarak hedef klasör yapısını hazırlıyor, tıpkı sizin sorunuzda olduğu gibi. Sonra tüm klasörlerin bir listesini bir dosyaya kaydederiz ve her birinin üzerine döngü yaparız. Her bir klasör için, o klasördeki tüm dosyaların bir listesini kaydederiz ve her dosyanın üzerine döngü yaparız. Her dosya için :docopy kopya komutunu oluşturur ve yürütür.


12
2018-02-18 15:27



Ciddi büyük cevap! - Chopper3
Tam olarak peşindeyim, teşekkürler. - Rob White


İlk 10 dosyanın tüm yapının dışında olmasını istiyorsanız, bunu kullanabilirsiniz (ağır şekilde Owen'in cevabından ödünç alındı!)

@echo off

mkdir %2

dir %1 /b /s /A:-D >tempfilelist.txt

setlocal enabledelayedexpansion

set counter=0

for /f "tokens=1 delims=¬" %%b in (./tempfilelist.txt) do (

    IF !counter! LSS 10 call :docopy "%%b" %2
    set /a counter+=1
)

endlocal
)

del /q tempfilelist.txt
GOTO:EOF

:docopy
copy %1 %2

GOTO:EOF

Onu gibi kullanın:

mybatchfilename.bat "C:\Source" "C:\Target"

2
2018-02-18 15:41





Normalde xcopy komutunu kullanarak bunu yapamayacağınızdan neredeyse eminim, gerçekten istediğiniz dosyaları bulmak için bir komut dosyası kullanmanız gerekecek, sonra bunları tek tek xcopy'e aktarmanız yeterli olacaktır. 'dışlamak' dizgisi cehennem :)


0
2018-02-18 13:34