Компьютерный форум 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=329384)

EricScream 29-08-2017 07:37 2761236

Перебрать файлы по именам
 
Пишу программу, которая должна раскидывать файлы по папкам с схожими именами, а то есть КП-11111_1 КП-11111_2 должны быть помещены в папку КП-11111, файлы НВ-222_1 и НВ-222_2 в папку НВ-222 и т.д. По отдельности эти файлы перемещаюся в папки, но если они находятся в одном каталоге при var = 6, получаются папки КП-111 и НВ-222.
Вопрос: как сделать проверку количества символов в имени файлов или брать имя до нижнего подчеркивания?

Имеется код:
Код:

@echo off
setlocal EnableDelayedExpansion
set fold=h:\1
set pict=*.png,*.jpg,*.ico,*.gif,*.tif
set /p var="Enter the number : "
if "%var%" == "0" ( exit )
pushd
chdir /d "%fold%"
for /f "delims=" %%a in ('dir %pict% /b /a:-d') do (
  set Where=%%a
  set Where1=!Where:~0,%var%!
  if not exist !Where1! md !Where1!
  move /y "%%a" !Where1!\
)
popd
pause


megaloman 29-08-2017 11:52 2761279

Цитата:

Цитата EricScream
брать имя до нижнего подчеркивания »

КП-11111_1.* КП-11111_2.* КП-11111.* будут помещены в одну папку. Итд.
Код:

@Echo Off

Set "BoxIn=Z:\Box_In"
Set "Mask=*.png *.jpg *.ico *.gif *.tif"

Pushd "%BoxIn%" && (
        FOR /F "usebackq tokens=1* delims=_" %%i IN (`Dir /B /A:-D %Mask% 2^>nul`) DO (
                If "%%j"=="" (
                        If Not Exist "%%~ni" Md "%%~ni"
                        Move "%%i" "%%~ni\" >nul
                ) Else (
                        If Not Exist "%%i" Md "%%i"
                        Move "%%i_%%j" "%%i\" >nul
                ) 
        )
)
Popd

Если надо вот так: КП-11111_1.* КП-11111_2.*, то:
Код:

@Echo Off

Set "BoxIn=Z:\Box_In"
Set "Mask=*.png *.jpg *.ico *.gif *.tif"

Pushd "%BoxIn%" && (
        FOR /F "usebackq tokens=1* delims=_" %%i IN (`Dir /B /A:-D %Mask% 2^>nul`) DO (
                If Not "%%j"=="" (
                        If Not Exist "%%i" Md "%%i"
                        Move "%%i_%%j" "%%i\" >nul
                ) 
        )
)
Popd



Время: 00:30.

Время: 00:30.
© OSzone.net 2001-