PDA

Показать полную графическую версию : CMD/BAT Значение по условию


Don_abbadon
28-11-2020, 13:14
Здравствуйте, не могу понять как решить задачу(((
Вопрос такой: пользуюсь *cmd файлом для сортировки, за основу берётся _, как бы сделать так чтобы имена создавались немного по другому.
Сейчас сортирует по _ и файл с названием "22-Ямал_..." прикидывает в папку 22-Ямал, а как сделать, так, чтобы исключить 22-, а оставить просто Ямал? допустим берём значение начиная с - заканчивая _?
Перечитал help к команде SET и всё равно не пойму как это реализовать.

Код:

echo off
@for /f "tokens=1* delims=_" %%i in ('dir/a-d/b *.jpg') do @ 2>nul md "%%i"& move "%%i_%%j" "%%i"
echo %%i_%%j
md %%i
copy %%i_%%j %%i\%%i_%%j
)

megaloman
28-11-2020, 14:29
прикидывает в папку » Как понять? Если перемещает, то,
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\*?-?*_*.jpg" /B /A:-D`) DO (
If Exist "%BoxIn%\%%f" (
FOR /F "tokens=2 delims=-_" %%n IN ("%%f") DO (
2>nul Md "%BoxOut%\%%n"
Move /Y "%BoxIn%\*?-%%n_*.jpg" "%BoxOut%\%%n\"
)
)
)
pause
Exit /B

Если надо копировать, то@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\*?-?*_*.jpg" /B /A:-D`) DO (
FOR /F "tokens=2 delims=-_" %%n IN ("%%f") DO >nul xcopy /F /D /Y "%BoxIn%\%%f" "%BoxOut%\%%n\"
)
pause
Exit /B

Don_abbadon
29-11-2020, 10:34
[q=megaloman]прикидывает в папку »
Как понять? Если перемещает, то,

Да без разницы, код который я скинул выше перемещает в созданные папки.
Не работает, к сожалению. либо я что-то делаю не так.
Не сортирует по папкам, как код который я скинул выше(( в чем может быть причина?

megaloman
29-11-2020, 11:14
Don_abbadon, Вы свои пути указали? Переименуйте тот командный, который тестируете, файл в .txt и приложите к сообщению. У Вас jpg-файлы, маска соответствует Вашим файлам? Если мой код не выдает никаких ошибок, однозначно - неверно указан входной каталог.

Don_abbadon
29-11-2020, 11:40
Вы свои пути указали? Переименуйте тот командный, который тестируете, файл в .txt и приложите к сообщению. У Вас jpg-файлы, маска соответствует Вашим файлам? Если мой код не выдает никаких ошибок, однозначно - неверно указан входной каталог. »
Да, указал, на сколько понял и разрешение поменял на tif, но что-то пошло не так, вот что я изменил:

@Echo Off
cls
Set "BoxIn=F:\Box_In"
Set "BoxOut=F:\Box_Out"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\*?-?*_*.tif" /B /A:-D`) DO (
FOR /F "tokens=2 delims=-_" %%n IN ("%%f") DO >nul xcopy /F /D /Y "%BoxIn%\%%f" "%BoxOut%\%%n\"
)
pause
Exit /B

В чём может быть проблема?
Спасибо.

Don_abbadon
29-11-2020, 12:13
Вы свои пути указали? Переименуйте тот командный, который тестируете, файл в .txt и приложите к сообщению. У Вас jpg-файлы, маска соответствует Вашим файлам? Если мой код не выдает никаких ошибок, однозначно - неверно указан входной каталог. »
Да, указал, на сколько понял и разрешение поменял на tif, но что-то пошло не так, вот что я изменил:

@Echo Off
cls
Set "BoxIn=F:\Box_In"
Set "BoxOut=F:\Box_Out"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\*?-?*_*.tif" /B /A:-D`) DO (
FOR /F "tokens=2 delims=-_" %%n IN ("%%f") DO >nul xcopy /F /D /Y "%BoxIn%\%%f" "%BoxOut%\%%n\"
)
pause
Exit /B

В чём может быть проблема?
Спасибо.

megaloman
29-11-2020, 13:43
@Echo Off
cls
Set "BoxIn=F:\Box_In"
Set "BoxOut=F:\Box_Out"

>"%~dpnx0.log1" 2>&1 Dir /B /A:-D "%BoxIn%\*.tif"
>"%~dpnx0.log2" 2>&1 Dir /B /A:-D "%BoxIn%\*?-?*_*.tif"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\*?-?*_*.tif" /B /A:-D`) DO (
FOR /F "tokens=2 delims=-_" %%n IN ("%%f") DO >nul xcopy /F /D /Y "%BoxIn%\%%f" "%BoxOut%\%%n\"
)
pause
Exit /B

Don_abbadon
29-11-2020, 14:55
Вот в батник вставлен отладочные строки. Около Вашего батника создадутся файлы "имя вашего батника.log1" "имя вашего батника.log2"
Покажите хотя бы несколько строк из них
Это »
Сейчас всё корректно отработало, спасибо Вам большое.




© OSzone.net 2001-2012