Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Рандомное распределение файлов в заданные папки (http://forum.oszone.net/showthread.php?t=352380)

yellow11 15-11-2022 20:02 2996551

Рандомное распределение файлов в заданные папки
 
Вложений: 1
Добрый день.
У меня есть определенное количество файлов в папке из них 2 всегда с одинаковым именем, но разным расширением eps и jpg, как пример D12112022-02_01.eps и D12112022-02_01.jpg
И вот задача рандомно перенести эти двойки в одну папку с номерами от 1 до 31( уже созданными и там могут быть другие файлы), чтобы каждая пара в разную папку, без переименовывания файлов.
Очень наболело уже вручную это делать изо дня в день
Спасибо за внимание

megaloman 15-11-2022 21:12 2996557

Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In"
        Set "Name=D*_??"
        Set "Ext1=jpg"
        Set "Ext2=eps"

        Set "BoxOut=Z:\Box_Out"
        Set /A Nfold=31

        For %%f In (1,1,10) Do Call Set /A Rnd=%%Random%%
        FOR %%f IN ("%BoxIn%\%Name%.%Ext1%") Do (
                If Exist "%%~dpnf.%Ext2%" Call :NumFile "%%~dpnf"
        )
        FOR /F "usebackq skip=%Nfold% delims==" %%f IN (`2^>nul Set "@@"`) DO Set "%%f="

        Set /A i=101
        FOR /F "usebackq tokens=2 delims==" %%f IN (`2^>nul Set "@@"`) DO (
                Call Set "ii=%%i:~-2%%"
                2>nul Call Md "%BoxOut%\%%ii%%"
                >nul Call Move "%%f.%Ext1%" "%BoxOut%\%%ii%%\"
                >nul Call Move "%%f.%Ext2%" "%BoxOut%\%%ii%%\"
                Call Set /A i+=1
        )       
Pause
Exit /B

:NumFile
        Set /A Rnd=10000+32768*%Random%/32768
        >nul 2>&1 Set "@@%Rnd%"&& GoTo :NumFile
        Set "@@%Rnd%=%~1"
Exit /B

yellow11, Почистите пожалуйста свои почтовые ящики в PM, система не позволяет отправить для Вас сообщения

DJ Mogarych 15-11-2022 21:23 2996560

Powershell
Код:

$rootFolder = "c:\temp\random"

dir $rootFolder |? psiscontainer -eq $false |group basename |% {
mv $_.group.fullname "$rootFolder\$(get-random (1..31))" -WhatIf
}

Убедитесь, что всё работает правильно, и потом уберите -WhatIf, чтобы реально переносило.

yellow11 16-11-2022 19:18 2996634

Powershell сработал, при использовании bat ничего не происходит, но в любом случае огромное спасибо)

megaloman 16-11-2022 22:26 2996656

yellow11, Вы свои пути правильно указали вместо моих?
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"
Если пути не верны, то
Цитата:

Цитата yellow11
при использовании bat ничего не происходит »


yellow11 17-11-2022 09:11 2996671

Спасибо, поправил путь, все отлично работает


Время: 22:20.

Время: 22:20.
© OSzone.net 2001-