Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] переместить файлы по папкам согласно расширению

Ответить
Настройки темы
CMD/BAT - [решено] переместить файлы по папкам согласно расширению

Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


Изменения
Автор: shadowbat
Дата: 27-02-2022
Код: Выделить весь код
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?

Отправлено: 06:47, 27-02-2022

 

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Цитата 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:39, 27-02-2022 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:50, 27-02-2022 | #3


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Цитата 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 27-02-2022 в 18:36.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:55, 27-02-2022 | #4


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Копирование в папки с именем расширения
Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:15, 27-02-2022 | #5


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата 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

Последний раз редактировалось shadowbat, 28-02-2022 в 13:35.


Отправлено: 05:22, 28-02-2022 | #6


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:53, 02-03-2022 | #7


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось shadowbat, 06-03-2022 в 09:03.


Отправлено: 06:43, 03-03-2022 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] переместить файлы по папкам согласно расширению

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Раскидать файлы по папкам согласно дате в имени файла spkvvs Скриптовые языки администрирования Windows 17 24-01-2024 16:03
CMD/BAT - [решено] переместить файлы по папкам согласно списку shadowbat Скриптовые языки администрирования Windows 9 17-11-2023 14:51
CMD/BAT - Как найти в архиве тестовые файлы по содержимому, а не по расширению? yaoleg2 Скриптовые языки администрирования Windows 0 04-01-2013 15:18
CMD/BAT - Разложить файлы из кучи по каталогам согласно образцу Maartimus Скриптовые языки администрирования Windows 18 14-07-2012 13:37
Запрет на файлы по расширению adba Microsoft Windows NT/2000/2003 5 06-08-2008 11:57




 
Переход