Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Найти папки содержащие файл (http://forum.oszone.net/showthread.php?t=340450)

maxim43g 08-05-2019 15:37 2870903

Найти папки содержащие файл
 
Добрый день.
мне необходимо найти все папки, содержащие файл "test.txt".
желательно сразу их переместить в другую директорию.
может скрипт какой или программа есть?

Iska 08-05-2019 21:49 2870940

1. «их переместить» — что именно переместить, каталоги или файлы?
2. Что делать при совпадении имён при попытке перемещения?

maxim43g 13-05-2019 09:36 2871390

Цитата:

Цитата Iska
1. «их переместить» — что именно переместить, каталоги или файлы?
2. Что делать при совпадении имён при попытке перемещения? »

переместить каталоги, но это необязательно, просто очень хотелось бы.
при перемещении совпадения каталогов быть не может, ведь они уже созданы на локальном диске. Имею ввиду, что Windows сразу бы ругался на совпадение имен

YuS_2 13-05-2019 10:34 2871401

Цитата:

Цитата maxim43g
переместить каталоги...очень хотелось бы»

Цитата:

Цитата maxim43g
при перемещении совпадения каталогов быть не может, ведь они уже созданы на локальном диске. »

Да ладно?!
Код:

c:\folder1\Folder\test.txt
c:\folder2\Folder\test.txt
c:\folder2\folder3\Folder\test.txt

Что и главное - куда перемещать?

Цитата:

Цитата maxim43g
Имею ввиду, что Windows сразу бы ругался на совпадение имен »

Ну, ладно, поругалась... а что делать-то с каталогами, перезаписывать или нет?

maxim43g 13-05-2019 10:53 2871406

Цитата:

Цитата YuS_2
Ну, ладно, поругалась... а что делать-то с каталогами, перезаписывать или нет? »

я наверное не правильно изъяснился)
подкаталогов нет.
т.е. только такого вида C:\папка\ и в ней либо присутствует файл test.txt либо нет, в данной папке только файлы, подкаталогов нет.
каталоги перезаписывать не нужно, лучше переименовать или добавить какой-либо символ в конце

YuS_2 13-05-2019 13:18 2871448

Цитата:

Цитата maxim43g
подкаталогов нет. »

Тогда, дубликатов в принципе не должно быть:
powershell
Код:

#requires -v 3.0
$src = 'c:\'
$dst = 'd:\out'
$file = 'test.txt'

if (!(test-path $dst)){md $dst|out-null}
mi (dir $src -dir|%{dir $_.fullname -file|? name -eq $file}|select directory).directory $dst


megaloman 13-05-2019 14:40 2871463

Цитата:

Цитата maxim43g
подкаталогов нет.
т.е. только такого вида C:\папка\ и в ней либо присутствует файл test.txt либо нет, в данной папке только файлы, подкаталогов нет. »

Ну, раз такая пьянка, то вот код CMD
Код:

@Echo Off
        Set "File=test.txt"
        Set "BoxIn=D:\CMD_Forum"
        Set "BoxOut=D:\CMD_Forum\Box_Out"
       
        FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%File%" /S /B /A:-D^|Find /V /I "%BoxOut%"`) DO (
                Set "Pf=%%~dpf"
                Call MD "%BoxOut%\%%Pf::=%%"
                Call 1>nul Move /Y "%%~dpf*.*" "%BoxOut%\%%Pf::=%%" &&Rd "%%~dpf"
        )
Exit /B

Цитата:

Цитата maxim43g
каталоги перезаписывать не нужно, лучше переименовать или добавить какой-либо символ в конце »

ИМХО, это плохая идея, непонятно, откуда что взято. Я переношу файлы с полным путём и буквой диска.
Цитата:

Цитата YuS_2
c:\folder1\Folder\test.txt
c:\folder2\Folder\test.txt
c:\folder2\folder3\Folder\test.txt »

->
c\folder1\Folder\test.txt
c\folder2\Folder\test.txt
c\folder2\folder3\Folder\test.txt

maxim43g 13-05-2019 17:00 2871482

Цитата:

Цитата YuS_2
Тогда, дубликатов в принципе не должно быть:
powershell »

супер! все сработало, спасибо!
скажите, такая вот еще ситуация, у меня файлы такого типа "заявление на материальную помощь", некоторые пользователи создавали файлы по разному, например "заяв на на материальную помощь" или "заяв. на материальную помощь". можно ли как то переместить эти каталоги, если в названии файла есть слово "помощь"?


megaloman , спасибо большое.
тот же вопрос, можно как то исправить скрипт, что бы он выполнял условия выше?

megaloman 13-05-2019 17:39 2871487

maxim43g,
Код:

Set "File=*помощь*.*"
Так как в имени русские символы, то критично - сохранить код в 866 (dos) кодировке.
Если надо искать файлы начиная с корня диска, то указывать, например,
Код:

Set "BoxIn=D:"
Скрипт позволяет иметь папку с перемещенными папками на том же диске в назначенной папке.
Код:

@Echo Off
        Set "File=*помощь*.*"
        Set "BoxIn=D:"
        Set "BoxOut=D:\CMD_Forum\Box_Out"
       
        FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%File%" /S /B /A:-D^|Find /V /I "%BoxOut%"`) DO (
                Set "Pf=%%~dpf"
                Call MD "%BoxOut%\%%Pf::=%%"
                Call 1>nul Move /Y "%%~dpf*.*" "%BoxOut%\%%Pf::=%%" &&Rd "%%~dpf"
        )
Exit /B

Как видите, изменения только в описании входных данных.

YuS_2 13-05-2019 18:33 2871495

Цитата:

Цитата maxim43g
переместить эти каталоги, если в названии файла есть слово "помощь"? »

Код:

#requires -v 3.0
$src = 'c:\'
$dst = 'd:\out'
$file = 'помощь'

if (!(test-path $dst)){md $dst|out-null}
mi (dir $src -dir|%{dir $_.fullname -file|? name -match $file}|select directory).directory $dst

чтобы с кириллицей не было проблем, скрипт лучше сохранять с кодировкой либо 1251, либо utf-8 с BOM


Время: 08:59.

Время: 08:59.
© OSzone.net 2001-