PDA

Показать полную графическую версию : [решено] переместить файлы по папкам согласно расширению


shadowbat
27-02-2022, 06:47
chcp 1251
@Echo OFF
Set "Folder=%CD%"
Set "DestDir=%CD%"

FOR /R "%Folder%" %%# in ("*") DO (
set "ext=%%~x#"
If not exist "%DestDir%\%%ext:~1%%" (call MKDIR "%DestDir%\%%ext:~1%%")
call Echo [+] Moving: "%%ext:~1%%"
call Move "%%#" "%DestDir%\%%ext:~1%%\" 1>NUL
)
Pause
Exit

в этом коде не выполняется
1. проверка "If not exist" - т.е. в лог выводится постоянно ошибка, что папка существует
2. Pause перед выходом - не паузится чтобы посмотреть лог
но в принципе свою задачу выполняет, только без удобств

как починить п1 п2?

megaloman
27-02-2022, 10:39
как их починить? »
Дешевле купить новое. :)@Echo Off
cls
>nul Chcp 1251
Set "BoxIn=%~dp0"
If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"

Set "BoxOut=%BoxIn%"
rem Set "BoxOut=Z:\Box_Out"

Attrib +R +H "%~dpnx0"
FOR /F "usebackq delims=" %%f In (`2^>nul Where "%BoxIn%":"*.?*" ^|Find /I /V "%~dpnx0"`) DO (
If Exist "%%f" (
Set "Ext=%%~xf"
2>nul Call MD "%BoxOut%\%%Ext:~1%%"
>nul Call Move "%%~dpf*%%~xf" "%BoxOut%\%%Ext:~1%%\"
)
)
Attrib -R -H "%~dpnx0"
Pause
Exit /B

shadowbat
27-02-2022, 11:50
Дешевле купить новое. »
О, он даже сам себя не перемещает, как удобно
А то приходилось после выполнения каждый раз в папку bat заглядывать и удалять сам скрипт

megaloman
27-02-2022, 17:55
О, он даже сам себя не перемещает, как удобно
А то приходилось после выполнения каждый раз в папку bat заглядывать и удалять сам скрипт »Если каждый раз бросать батник в обрабатываемую папку и затем удалять его - это мазохизм по методу Петрова.
Лучше не копировать батник в обрабатываемую папку. Создайте его в каком-либо месте и на рабочем столе создайте только ярлык на него. В проводнике выбирайте нужную для обработки папку и мышкой затаскивайте его на этот ярлык. Вариант для такой работы. »
@Echo Off
cls
>nul Chcp 1251
If "%~1"=="" (Echo Bat File "%~dpnx0" mast run with argument: folder path. Press any key. &>nul Pause &Exit /B)

Set "BoxIn=%~1"
If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"

Set "BoxOut=%BoxIn%"

FOR /F "usebackq delims=" %%f In (`2^>nul Where "%BoxIn%":"*.?*"`) DO (
If Exist "%%f" (
Set "Ext=%%~xf"
2>nul Call MD "%BoxOut%\%%Ext:~1%%"
>nul Call Move "%%~dpf*%%~xf" "%BoxOut%\%%Ext:~1%%\"
)
)
Echo Press any key. &>nul Pause
Exit /B

alpap
27-02-2022, 20:15
Копирование в папки с именем расширения
@echo off
setlocal enabledelayedexpansion
set "in=papka_in"
set "out=papka_out"
for /f "delims=" %%a in ('dir /a-d/b/s "%in%"') do (set "rf=%%~xa"& if not exist "%out%\!rf:~1!" md "%out%\!rf:~1!")& copy "%%~a" "%out%\!rf:~1!"
exit

Копировать по расширениям
@echo off
set "in=papka_in"
set "out=papka_out"
set "rf=txt bat docx"
for %%i in (%rf%) do for %%j in ("%in%\*.*") do if ".%%~i"=="%%~xj" copy "%%~j" "%out%"
pause

Копировать файлы по расширениям в папки по порядку по номеру
@echo off
set "d_in=papka_in"
set "d_out=papka_out"
for /f "delims=" %%a in ('2^>nul dir /a-d/b/s "%d_in%\*"') do set rf%%~xa=%%~xa
for /f "tokens=2 delims==" %%a in ('set rf') do set/a nr+=1& cmd/v/c xcopy "%d_in%\*%%~a" "%d_out%\!nr!\"
pause

shadowbat
28-02-2022, 05:22
Проверьте у себя мой код »
2й код работает
Копирование в папки с именем расширения »
1й код
не работает с папкой C:\!! test - копия , из-за "!! ", без воскл знаков работает

Копировать по расширениям »
2й код

set "in=%CD%"
set "out=%CD%"
поверх самого себя

set "in=%CD%"
set "out=%CD%\111"
копирует каждый файл в файл "111" с его перезаписью

Копировать файлы по расширениям в папки по порядку по номеру »
3й код
работает
------------------------------
Код из 1го сообщения в теме не подлежит починке?
изначально был такой и делал папки с точкой, а в 1ом сообщении была попытка переделать на вариант без точки
chcp 1251
@Echo OFF

Set "Folder=%CD%"
Set "DestDir=%CD%"

FOR /R "%Folder%" %%# in ("*") DO (
If not exist "%DestDir%\%%~x#" (MKDIR "%DestDir%\%%~x#")
Echo [+] Moving: "%%~nx#"
Move "%%#" "%DestDir%\%%~x#\" 1>NUL
)
Pause
Exit

alpap
02-03-2022, 21:53
Код из 1го сообщения »
моего?

@echo off
set "in=papka_in"
set "out=papka_out"

for /f "delims=" %%a in ('dir /a-d/b/s "%in%"') do set "rf=%%~xa"& call :# "%%~a" "%%rf:~1%%"
pause& exit

:#
if not exist "%out%\%~2" md "%out%\%~2"
copy "%~1" "%out%\%~2"
exit /b

shadowbat
03-03-2022, 06:43
моего? »
код из шапки темы
код »
теперь этот код работает даже с "!!" в имени
---------------------------------------------
итого в теме 5 решений на любой вкус и 1 работающее но не очень красивое решение в шапке
пусть тема будет решённой тогда




© OSzone.net 2001-2012