Войти

Показать полную графическую версию : Поиск файлов exe и составление списка папок,без упоминания файлов.


Shauniam
09-07-2021, 06:05
Windows 10 Домашняя.Этот скрипт нужен чтобы составить список папок E:\ в которых находятся exe-шники,чтобы с помощью другого скрипта- все эти указанные в списке папки перенести в одну папку E:\Programs .Почему нужен такой список где указаны только папки,без находящихся в них файлов?Это нужно чтобы скрипт переносил папки с находящимися в них файлами и не дублировал эти файлы при переносе в указанную общую папку.Как я знаю- скрипт который переносит папки с файлами,еще дублирует файлы вне папок,получается двойное перенесение файлов.Надеюсь хорошо объяснил задачу-просьбу.ведь как я понял из предыдущих тем что программисты любят(как "хлеб") конкретные задачи.Учусь на ошибках.Если что нужно уточнить,спрашивайте.

Elven
09-07-2021, 09:18
Get-ChildItem -Path E:\ -Recurse *.exe | Select-Object Directory | Sort-Object -Unique
просто список, просто выводится на экран. для того чтобы переносить нужно будет соблюсти уйму условий. Первое что приходит в голову это структура приблизительно такая:
├── dir1
│ ├── dir2
│ │ ├── file1.exe
│ │ ├── dir3
│ │ │ └── file2.exe
│ │ ├── file3.exe
│ │ ├── file4.exe
│ │ └── dir4
│ │ └── dir5
│ │ ├── dir6
│ │ │ ├── file5.exe
│ │ │ └── file6.exe
│ │ └── dir7
│ │ └── file7.exe
│ ├── file.exe

т.е. в списке будет
dir1
dir1\dir2
dir1\dir2\dir3
dir1\dir4\dir5\dir6
dir1\dir4\dir5\dir7
А по факту нужно будет переносить целиком dir1.
Учитывая что дело происходит (как я понимаю) на домашнем компьютере, то скорей всего работа такая - одноразовая, или, по крайней мере, не слишком частая. При наличии списка лучше перенести папки руками.

megaloman
09-07-2021, 12:24
@Echo Off
cls
>nul Chcp 1251

Set "BoxIn=Z:"
rem Set "BoxIn=Z:\Soft_In"

>"%~dpnx0.log" (FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%\" /S /B /A:D`) DO If Exist "%%d\*.exe" Echo "%%d")
pause
Exit /B 0
Результат - в текстовом файле ИмяБатФайла.bat.loq
Нарисовал ответ на Ваш предыдущий вопрос (http://forum.oszone.net/thread-349147.html)

DJ Mogarych
09-07-2021, 12:49
Powershell

$paths = dir 'E:\' -Recurse -Filter '*.exe' |? Directory -notmatch 'E:\\Programs' |sort Directory -Unique

$paths |% {
if ($_.Directory.Parent.FullName -notin $paths.Directory.FullName) {
mv "$($_.Directory.FullName)" "E:\Programs" -Force -Confirm:$false -WhatIf
}
}


-WhatIf выдаёт список, если его убрать - будет реально переносить.




© OSzone.net 2001-2012