powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Windows [игнор отключен] [закрыт для гостей] / помогите с bat или командной строкой
13 сообщений из 13, страница 1 из 1
помогите с bat или командной строкой
    #39863241
magdalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

помогите разобраться с вроде бы легкой задачей, но такой хлопотной)

Есть каталог (папка) USER

с примерно такой структурой

d:\USER

d:\USER\1
d:\USER\1\a
d:\USER\1\b
d:\USER\1\c

d:\USER\2
d:\USER\2\a
d:\USER\2\b
d:\USER\2\c

в папках a, b, c находятся файлы

Как эти файлы одним махом перенести с abc в их родительский каталог ?

то есть 1 и 2

Что бы с этого дерева получить папки с файлами
d:\USER\1\.*files
d:\USER\2\.*files
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39863294
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое решение имхо такое.
Код: sql
1.
FORFILES /S /C "cmd /c dir @path" > file.txt


В результате список полных имен файлов в текстовом файле.
Импортируем в Excel.
В соседней колонке отделяем первые два каталога.
На основе этих двух колонок строим правильную команду `ren`.
Полученный текст команд копипастим в окно компроцессора. Или копипастим в батч-файл и запускаем его.
Всё.
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39863309
magdalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, но не хотелось бы задействовать промежуточное решение в виде excel.

Делаю

for /R "d:\test" %i in (*.txt) do echo copy "%~i" "%~dpi", но %~dpi показывает текущую папку файла. А как подняться на уровень выше?
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39863312
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
magdalinaА как подняться на уровень выше?
Код: powershell
1.
..\
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39863319
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно * ставить если имя не меняется
Код: powershell
1.
copy file.txt ..\*
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39863324
magdalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
..\* - подразумевает уровень выше, но относительно какой паки? Команда "cd" не подразумевается что бы менять директорию, где найден файл.
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39863326
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
magdalina..\* - подразумевает уровень выше, но относительно какой паки? Команда "cd" не подразумевается что бы менять директорию, где найден файл.
Относительно текущей.

Можно задать папку
Код: powershell
1.
copy c:\folder\file.txt c:\folder\..\*
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39863330
magdalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так собственно в этом и состоял вопрос, как это делать динамически из скрипта
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39864397
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему powershel не используется? С такой задачей он легко справится.
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39864463
magdalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
через split-path? А можно небольшой пример?
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39865358
SAS2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если $file - это действительно файл - экземпляр System.IO.FileInfo (и не действительно каталог: System.IO.DirectoryInfo), то он имеет свойство Directory, которое является экземпляром DirectoryInfo, который имеет Name

$file |
copy-item -destination {
Join-Path C:\ArchiveCopy\ -childpath ($_.Directory.Name + "_" + $_.Name) }
(Использование конвейера для запуска, поскольку параметр -LiteralPath Copy-Item будет привязан к свойству PSPath из конвейера, поэтому нет необходимости вытаскивать исходное имя файла из объекта $file.)

Если $file может быть каталогом, то вам нужно выполнить большую часть работы самостоятельно, но, вероятно, проще сначала отфильтровать каталоги:



dir -r -path C:\StuffToCopy\ |
where { -not $_.PSIsContainer } |
copy-item -destination {
Join-Path C:\ArchiveCopy\ -childpath ($_.Directory.Name + "_" + $_.Name) }
Примечание:

Не нужно сохранять все объекты файла, а затем перебирать их: пусть конвейер выполняет цикл
Не нужно -i "*.*": это по-прежнему по умолчанию (и если вам нужно фильтровать файлы по шаблону подстановки, выберите параметр -filter pattern: фильтр передается в файловую систему, а не создает объекты .NET, а затем фильтрует они намного медленнее, если файлов много).
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39866006
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Найти самый глубокий вложенный каталог и переместить из него файлы на 1 уровень повыше?

Код: powershell
1.
2.
$deepest = (gci d:\users -dir  -rec | Sort-Object { $_.FullName.split('\').Count })[-1]
gci $deepest | move-item -Destination (split-path $deepest)
...
Рейтинг: 0 / 0
помогите с bat или командной строкой
    #39866548
magdalina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы. Буду пробовать.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Windows [игнор отключен] [закрыт для гостей] / помогите с bat или командной строкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]