1 / 7 / 0
Регистрация: 19.09.2017
Сообщений: 81

Перенос содержимого папок на уровень вверх

19.12.2022, 01:22. Показов 1491. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, подскажите, пожалуйста, такой батник

Есть структура папок на два уровня - Группа / Подгруппа (+ общая папка-путь)
В конечной папке Подгруппы лежат разные файлы (фото и текстовые)
Нужно из конечных папок перенести (как бы консолидируя) все на уровень вверх в соответствующую им Группу верхнего уровня

Чтобы из этого:

_Общая папка
__Группа1
___Подгруппа1
____файл1
____файл2
___Подгруппа2
____файл3
____файл4
__Группа2
___Подгруппа1
____файл1
____файл2
___Подгруппа2
____файл3
____файл4

Получилось это:

_Общая папка
__Группа1
____файл1
____файл2
____файл3
____файл4
__Группа2
____файл1
____файл2
____файл3
____файл4

Спасибо!
Чтобы не было ошибок совпадающих имен, заголовки всех файлов будут изначально уникализированы!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2022, 01:22
Ответы с готовыми решениями:

Перемещение на один уровень вверх в дереве папок
как можно переместится на папку вверх с помощью кнопки, по принципу обычной кнопки "Назад" в windows приведите пример кто знает

Архивация содержимого нескольких папок в отдельные архивы с названиями самих папок
Ребята, я знаю, то что я сейчас спрошу, может показаться нереальным, но все-таки... Если возможно извлечь каждый архив в отдельную папку,...

Перенос папок и файлов в них кроме 2х папок по новому пути
Всем привет! Подскажите пожалуйста простое решение по переносу папок c файлами в новую папку кроме 2х папок. Подробнее - Есть папка P1...

8
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
20.12.2022, 08:59
Anyaax,
Держинский:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
@ECHO OFF
SET "BASEDIR=%~dp0GROUPS"
SET LOGFILE=MOVELOG.TXT
 
IF EXIST "%BASEDIR%\" (
FOR /F "usebackq" %%X IN ( `DIR /B "%BASEDIR%"` ) DO GOTO EBD
IF "%DNE%"=="" ECHO DIRECTORY "%BASEDIR%" IS EMPTY& GOTO ERRR
  ) ELSE (ECHO NO DIRECTORY "%BASEDIR%"& GOTO ERRR)
:EBD
 
 
ECHO %date%> "%LOGFILE%"
CALL :WP
 
ECHO+
ECHO -___--__---_---- HELLO ----_---__--___-
PAUSE
GOTO END
 
 
:WP
SET /A C=0
SET CURDIR=
 
FOR /F "usebackq tokens=* delims=" %%A IN ( `DIR /AD /B "%BASEDIR%" 2^>NUL` ) DO (
CALL :COUNT C CURDIR "%BASEDIR%\%%A"
 )
CALL :COUNT C CURDIR
GOTO :EOF
 
 
:COUNT
(SET /A %~1+=1
SET %~2=%~3
IF %C% GTR 0 (
ECHO+
ECHO %C%     Processing folder: "%CURDIR%">> %LOGFILE%
ECHO %C% %CURDIR%
<NUL SET /P="Processing."
 
IF EXIST "%TEMP%\ERRR" DEL "%TEMP%\ERRR"> NUL
FOR /R "%CURDIR%" %%X IN (*) DO (
 
IF NOT "%CURDIR%\"=="%%~dpX" (
<NUL SET /P="MOVE: %%X --> ... %%~nxX  [">> "%LOGFILE%"
SET>NUL
MOVE /Y "%%X" "%CURDIR%\%%~nxX"> NUL
IF NOT ERRORLEVEL 1 (
<NUL SET /P="."
ECHO OK] >> "%LOGFILE%"
 ) ELSE (
<NUL SET /P="X"
ECHO BAD] >> "%LOGFILE%"
ECHO %C% %%~nxX>> "%TEMP%\ERRR"
 )
 )
REM ===== eof recursion =======
 )
ECHO+
 
REM Remove SUBdirectories
FOR /F "usebackq tokens=* delims=" %%Z IN (`DIR /AD /B "%CURDIR%" 2^>NUL`) DO (
ECHO REMOVE DIRECTORY: %%Z>> "%LOGFILE%"
SET>NUL
RD /S /Q "%CURDIR%\%%Z" 2>NUL
IF ERRORLEVEL 1 ECHO %C% %%Z>> "%TEMP%\ERRR"
 )
 
ECHO NOW IN THIS FOLDER:>> "%LOGFILE%" 
DIR /A-D /B "%CURDIR%">> "%LOGFILE%" 
IF ERRORLEVEL 1 ECHO %C%>> "%TEMP%\ERRR"
IF NOT EXIST "%TEMP%\ERRR" (ECHO ###operation complete###>> "%LOGFILE%") ELSE (ECHO ###operation INcomplete###>> "%LOGFILE%")
 
 
REM eof processing of one of the folders
ECHO+>> "%LOGFILE%"
 )
 )
GOTO :EOF
 
 
:ERRR
ECHO SOME KIND OF ERROR!
PAUSE
GOTO :EOF
 
:END
1
 Аватар для Angry Old Man
2705 / 713 / 298
Регистрация: 26.03.2022
Сообщений: 1,326
Записей в блоге: 1
20.12.2022, 09:44
Лучший ответ Сообщение было отмечено Anyaax как решение

Решение

Если Вы уверены, что " заголовки всех файлов будут изначально уникализированы!", то
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@Echo Off
cls
>nul chcp 1251
    Set "BoxIn=Z:\Box_In\_Общая папка"
    Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 2)
        FOR /D %%d IN ("%BoxIn%\*.*") DO FOR /D %%f IN ("%%d\*.*") DO (
            >Nul Move "%%f\*.*" "%%d\"
            2>nul Rd "%%f"
        )
    Popd
pause
Exit /B
Если есть сомнения, то
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Echo Off
cls
>nul chcp 1251
    Set "BoxIn=Z:\Box_In\_Общая папка"
    Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 2)
        FOR /D %%d IN ("%BoxIn%\*.*") DO FOR /D %%f IN ("%%d\*.*") DO (
            FOR %%i IN ("%%f\*.*") DO (
                If Not Exist "%%d\%%~nxi" >NUL Move "%%i" "%%d\"
            )
            2>nul Rd "%%f"
        )
    Popd
pause
Exit /B
1
1 / 7 / 0
Регистрация: 19.09.2017
Сообщений: 81
21.12.2022, 00:50  [ТС]
Спасибо!
YUEN HOIFEF,
ух, какой большой вышел код, это почему так?
Angry Old Man,
как понимаю, лишний элемент пути легко убирается - "\Box_In" а то меня несколько пугает его близкое нарицательное обозначение ) через BoxIn
я просто, недавно, запускала один такой бат, который мне делали когда то, с дуру попробовав в нем "лишнее удалить" (с точки зрения банальной эрудиции)). так он мне снес за полминуты пол жесткого диска (удалением) ) хочу все пост сделать на эту тему, не ожидала, что можно так делов натворить..
0
 Аватар для Angry Old Man
2705 / 713 / 298
Регистрация: 26.03.2022
Сообщений: 1,326
Записей в блоге: 1
21.12.2022, 01:46
Лучший ответ Сообщение было отмечено Anyaax как решение

Решение

Anyaax, Пользователи делятся на 2 группы: кто потерял информацию, и кому это еще предстоит. Поэтому я жестко проверяю существование указанных папок в Pushd и в командах стремлюсь использовать полные пути, чего и Вам советую.
В переменной BoxIn желателен полный путь папки, лишний элемент пути, как Вы его обозвали, легко убирается - он показан как пример того, что "_Общая папка" тоже может быть вложенная.
1
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
21.12.2022, 04:09
Anyaax,
ух, какой большой вышел код
Большому человеку, большой код.
А вообще, меньше 1000 строк - микрокод.
1
1 / 7 / 0
Регистрация: 19.09.2017
Сообщений: 81
21.12.2022, 16:01  [ТС]
Angry Old Man,
Расскажу тогда тут о своем неудачном кейсе, чтобы на будущее понимать, чего я натворила там )

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

1@echo off /еще у меня тут и единичка случайно закралась )
set "d=C:\Papka"
 
for /f "delims=" %%a in ('dir /ad/b "%~1"') do echo %%a|>nul find /i "%~2" && (
>nul move /y "%~1\%%a\*" "%~1"
>nul 2>&1 rd /q /s "%~1\%%a"
) || (
>nul 2>&1 rd /q /s "%~1\%%a"
)
exit /b


После чего, у меня на глазах резко стали пропадать папки. И жесткий диск похудел за 20 сек на 250Гб. Тут я догадалась окошко прикрыть вручную.

Отсюда вопросы (риторические, технические и тд).
Да, я поняла уже, что исполнение сценария там идет более сложно, и его недопустимо так вероломно кромсать. Но что смутило меня.
1. Была указана папка исходного пути исполнения сценария (путь полный!). И я ею рисковать готова была. Каким образом, функция переметнулась на весь жесткий диск??
2. Был ли риск, продолжать это бег по дискам соседним также, и удалить нахрен весь мой компьютер с его бесценной инфой? )(замечу, экстремально быстро, без переноса в корзину)
Просто, так быть не должно. В моем понимании:
а) если функция поломана, она должна вызвать ошибку
б) если указан путь старта скрипта, то все неприятности должны быть ограничены этим путем

Прошу пояснить, при желании, где я неправа, и, все таки, любопытства ради, что за огрызок скрипта я так породила, как монстра, и чем бы он дальше грозил, если его не остановить? )
А то у меня странное ощущение, так сказать, нехороший остался осадок, что в моих вещах грязно кто то покопался всерьез (.

/И еще не пойму. Каким образом, батник мог удалить десятки тыс файлов за такое короткое время (масштаб трагедии уже определила, сравнив с бэкапом. средствами виндоус такое бы перемещалось в корзину 20+ минут).

Добавлено через 7 минут
И обывательский еще такой вопрос.
Очень мне нравится работать с текстовым файлом. Очень нравится как можно многое удобно решить с файловой обработкой, не разыскивая десятки разных программ. Вопрос.
Какой порог входа в программирование такого порядка? С чего начинать обучение (никак курсов подобных нигде не нахожу, но осознала что лучше переходить сразу к какому то PowerShell). Код выглядит магично. как понимаю, половина его - это регулярка, стало быть, начинать образование нужно с нее?
В общем, каков мог быть кейс (алгоритм) обучения программированию на бат-файлах для бытовых целей (в основном - это файловая пакетная обработка) для неглупой девчонки, десять лет проработавшей аналитиком в отделе IT и со многими вещами на ты ) (Excel и тд). И за какой срок? Спасибо! )
0
6668 / 2829 / 1088
Регистрация: 06.06.2017
Сообщений: 9,600
21.12.2022, 17:42
Цитата Сообщение от Anyaax Посмотреть сообщение
Была указана папка исходного пути исполнения сценария (путь полный!).
Где? В качестве параметра к сценарию? Если нет, то вместо "%~1" получаем "". Ну а от создания переменной %d% командой set толку тут вообще никакого (команда висит мёртвым грузом - переменная не используется). Лучше задавать рабочий каталог командой cd/d или pushd.
Цитата Сообщение от Anyaax Посмотреть сообщение
Был ли риск, продолжать это бег по дискам соседним также, и удалить нахрен весь мой компьютер с его бесценной инфой?
Нет. Цикл проходит только в рамках рабочего пути, который может касаться только одной буквы диска.
Цитата Сообщение от Anyaax Посмотреть сообщение
Каким образом, батник мог удалить десятки тыс файлов за такое короткое время
В коде удаляются папки со всех содержимым, это достаточно быстрая операция.

Цитата Сообщение от Anyaax Посмотреть сообщение
как понимаю, половина его - это регулярка, стало быть, начинать образование нужно с нее?
Нет тут никаких регулярок. Начинать изучать ЯП сразу с неё (без освоения базового синтаксиса) как минимум странно. А что изучать и какими редакторами пользоваться - уже как фишка ляжет. Сферы задач по мере освоения ЯП часто гипертрофируются. поэтому если сегодня хватит простого командника, то через пару месяцев запросы могут быстро выйти за его "магические" рамки и изучать придётся что-то более основательное (скриптовых языков благо хватает).
1
 Аватар для Angry Old Man
2705 / 713 / 298
Регистрация: 26.03.2022
Сообщений: 1,326
Записей в блоге: 1
21.12.2022, 19:19
Цитата Сообщение от Anyaax Посмотреть сообщение
все неприятности должны быть ограничены этим путем
Никто Вам ничего не должен. Вы требуете от CMD развитый искусственный интеллект. Исправлять Ваши косяки и я не берусь, не хватает инфы.
Для начала, у Вас на входе батника 2 аргумента. Они были, проверили? Они корректны - проверили?
Вы написали set "d=C:\Papka" - но оно же никак не задействовано
Допустим, запустили батник в папке диска C:
Первого аргумента ИМХО не было. ("%~1"=="")
Тогда конструкция rd /q /s "%~1\%%a" --> переходит на корень диска, /q /s - позволяет убить папки без вопросов, есть там содержимое, или нет. На другой диск, естественно, не пойдем, но текущий диск попортим. А RD работает очень быстро.
Обратите внимание, как я реализовал перемещение вверх и удаление папок.
Во первых, контроль пути (если бы он передавался в аргументе, я бы проверил наличие аргумента)
rd у меня без ключей - если папка не пустая, удалена не будет.
А с ключами - надо проверять всё-таки корректность пути и быть уверенным в их правильности.
С CMD чем-то проще, а что-то сложнее.
Если, допустим, в js, vbs при возникновении ошибки (без включения обработки ошибок) скрипт вылетит в ошибочное сообщение и исполнение остановится, то в CMD исполнение пойдет дальше.
Цитата Сообщение от Anyaax Посмотреть сообщение
мне нравится работать с текстовым файлом
C CMD в этом случае лучше не связываться.
В моём понимании CMD нужно для рутинных процессов обслуживания системы - всякие пересылки файлов, архивация бэкапов.
Тексты для меня скорее экзотика, чаще использую vbs, особенно потому, что VBA во многом с ним совпадает и можно писать скрипты VBS для обработки Excel-файлов. Но с UTF в vbs не так просто.
PowerShell увы не пользуюсь, отошел от темы. Похоже, это самое перспективное.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2022, 19:19
Помогаю со студенческими работами здесь

Тег 'a', подняться на один уровень вверх
Здравствуйте! Подскажите как сделать так, чтобы при нажатии на ссылку 'a' страница переходила на один уровень вверх. Приложение...

Как выйти на 1 уровень вверх в TreeNode
У меня в тринод имеется некий путь к заданному ранее существующему узлу в дереве тривью, как мне перейти к предыдущему узлу дерева,...

Как перейти на уровень вверх по таблице?
как имея: t получить: t ,то есть перейти на уровень вверх по таблице?

Следующий элемент после поднятия на уровень вверх
Есть вот такой html код &lt;div class=&quot;market_menu-button&quot;&gt;&lt;i class=&quot;icon-plus&quot;&gt;&lt;/i&gt;Всё&lt;/div&gt; &lt;div...

Не получаеться разобраться с реализации кнопки поднятия на уровень вверх
Доброго времени суток! тоже пишу файловый менеджер, хотелось бы спросить как реализовывали поднятие на уровень вверх. Вот моя реализация: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
Настройка MTProxy
Loafer 11.06.2025
Дополнительная информация к инструкции по настройке MTProxy: Перед сборкой проекта необходимо добавить флаг -fcommon в конец переменной CFLAGS в Makefile. Через crontab -e добавить задачу: 0 3. . .
Изучаем Docker: что это, как использовать и как это работает
Mr. Docker 10.06.2025
Суть Docker проста - это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер, если говорить образно, это запечатанная коробка, в которой находится ваше приложение вместе. . .
Тип Record в C#
stackOverflow 10.06.2025
Многие годы я разрабатывал приложения на C#, используя классы для всего подряд - и мне это казалось естественным. Но со временем, особенно в крупных проектах, я стал замечать, что простые классы. . .
Разработка плагина для Minecraft
Javaican 09.06.2025
За годы существования Minecraft сформировалась сложная экосистема серверов. Оригинальный (ванильный) сервер не поддерживает плагины, поэтому сообщество разработало множество альтернатив. CraftBukkit. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru