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

shadowbat 27-02-2022 06:47 2980892

переместить файлы по папкам согласно расширению
 
Код:

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 2980906

Цитата:

Цитата shadowbat
как их починить? »

Дешевле купить новое. :)
Код:

@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 2980910

Цитата:

Цитата megaloman
Дешевле купить новое. »

О, он даже сам себя не перемещает, как удобно
А то приходилось после выполнения каждый раз в папку bat заглядывать и удалять сам скрипт

megaloman 27-02-2022 17:55 2980936

Цитата:

Цитата shadowbat
О, он даже сам себя не перемещает, как удобно
А то приходилось после выполнения каждый раз в папку bat заглядывать и удалять сам скрипт »

Если каждый раз бросать батник в обрабатываемую папку и затем удалять его - это мазохизм по методу Петрова.
Цитата:

Цитата megaloman
Лучше не копировать батник в обрабатываемую папку. Создайте его в каком-либо месте и на рабочем столе создайте только ярлык на него. В проводнике выбирайте нужную для обработки папку и мышкой затаскивайте его на этот ярлык. Вариант для такой работы. »

Код:

@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 2980944

Копирование в папки с именем расширения
Код:

@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 2980961

Цитата:

Цитата megaloman
Проверьте у себя мой код »

2й код работает
Цитата:

Цитата alpap
Копирование в папки с именем расширения »

1й код
не работает с папкой C:\!! test - копия , из-за "!! ", без воскл знаков работает

Цитата:

Цитата alpap
Копировать по расширениям »

2й код

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

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

Цитата:

Цитата alpap
Копировать файлы по расширениям в папки по порядку по номеру »

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 2981045

Цитата:

Цитата shadowbat
Код из 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 2981051

Цитата:

Цитата alpap
моего? »

код из шапки темы
Цитата:

Цитата alpap
код »

теперь этот код работает даже с "!!" в имени
---------------------------------------------
итого в теме 5 решений на любой вкус и 1 работающее но не очень красивое решение в шапке
пусть тема будет решённой тогда


Время: 21:15.

Время: 21:15.
© OSzone.net 2001-