1 (изменено: Jack_Dream, 2022-05-24 15:52:16)

Тема: CMD/BAT: Как переместить папку на 2 папки вверх?

Путь к папке такой

random_name/data/data/nugnaya_papka/содержимое_нужно_папки

как сделать такой:
random_name/содержимое_нужно_папки

random_name в каждой папки разный.

2

Re: CMD/BAT: Как переместить папку на 2 папки вверх?

e::

Send ^{sc1E}	;Ctrl + A
Sleep, 50		;продолжительность засыпания скрипта подберите сами
Send ^{sc2D}	;Ctrl + X

Loop, 4
	{
	Sleep, 100
	Send !{sc148}	;Alt + стрелка вверх - переход на уровень вверх
	}

Sleep, 50
Send ^{sc2F}	;Ctrl + V

q::Return

3

Re: CMD/BAT: Как переместить папку на 2 папки вверх?

isxodnik, это не ветка AHK.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: CMD/BAT: Как переместить папку на 2 папки вверх?

Jack_Dream пишет:

random_name в каждой папки разный

Здесь два варианта:
1. передавать каталог-источник как параметр скрипту


set "move_src=%~1"
set "move_dst=%~1\..\.."

2. запускать скрипт из каталога-источника


set "move_src=%CD%"
set "move_dst=%CD%\..\.."
( 2 * b ) || ! ( 2 * b )

5 (изменено: andypetr, 2022-05-25 12:48:58)

Re: CMD/BAT: Как переместить папку на 2 папки вверх?

Jack_Dream, вот насколько я понял задачу - попытался сделать универсальное решение.
Не могу только понять в условии: "random_name в каждой папки разный".
У меня параметрами передаётся полный путь к нужной папке и кол-во уровней, на сколько переместить вверх её содержимое.
Сама нужная папка, став пустой, удаляется.
Команда move вызывается 2 раза - отдельно для файлов из нужной папки и для подпапок.

PS. У меня написано в коде "1-й параметр: полный путь к папке", но можно также и относительные пути использовать.

@echo off & title %~nx0 & SetLocal EnableExtensions EnableDelayedExpansion
goto :Main
rem ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Help
  echo.Перемещение содержимого (файлов и папок) выбранной папки Folder вверх на N (^>0) уровней
  echo.Вызов : %~nx0 Папка Колво_уровней
  echo.Пример: %~nx0 ParentFolder\Fld_A\Fld_B\Fld_C 3
  echo.        - перемещает содержимое папки Fld_C на 3 уровня вверх (в папку ParentFolder).
  echo.
:PauseEnd
  pause
:End
  exit /b

rem ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Main

  if "%~1"=="" goto :Help
  if "%~2"=="" goto :Help

  rem 1-й параметр: полный путь к папке.
  set "sFolder=%~1"
  if "%sFolder:~-1%"=="\" set "sFolder=%sFolder:~0,-1%" &rem убираем конечный символ "\"

  rem 2-й параметр: количество уровней вверх.
  set /a nLevels=%~2
  if !nLevels! lss 1 goto :Help

  rem Строим относительный путь к верхней папке:
  set "sLevels="
  for /l %%i in (1,1,!nLevels!) do (
    set "sLevels=\..!sLevels!"
  )

  for %%a in ("!sFolder!!sLevels!") do (
    echo."!sFolder!" -^> "%%~fa"
  )

  rem Переносим одиночные файлы из sFolder:
  move  "!sFolder!\*.*" "!sFolder!!sLevels!" >nul

  rem Переносим подпапки из sFolder:
  for /d %%a in ("!sFolder!\*.*") do (
    move  "%%~a" "!sFolder!!sLevels!" >nul
  )

  rem Удаляем пустую папку sFolder:
  rmdir "!sFolder!" >nul

pause

EndLocal
exit /b