Войти

Показать полную графическую версию : проверить наличие папок


alek2012
05-06-2013, 11:31
Всем привет. Может кто то писал такой скрипт, чтобы по списку пользователей проверял наличие существующих папок в нужных директориях
с таким же названием как имя пользователя, например есть пользователи admin и admin1
нужно проверить есть ли в директориях \\srv1\ и \\srv2\ папки с именами admin и admin1 , если есть вывести в файл что обнаружены

Iska
05-06-2013, 11:46
В чём у Вас сложность написания?

alek2012
05-06-2013, 12:36
я думал может у кого есть готовый пример, а то времени сейчас нет

Iska
05-06-2013, 13:49
а то времени сейчас нет »
Прямо таки совсем никак не выделите и десяти минут?! «Не верю!»

megaloman
05-06-2013, 15:23
есть ли в директориях \\srv1\ и \\srv2\ а где директории? ИМХО, здесь имена серверов, должно быть что-то наподобие \\srv1\траляля. В этом случае можно бы было бы написать Dir "\\srv1\траляля\admin" /s /b /A:D
Dir "\\srv1\траляля\admin1" /s /b /A:D
Dir "\\srv2\траляля\admin" /s /b /A:D
Dir "\\srv2\траляля\admin1" /s /b /A:D

Iska
05-06-2013, 16:29
megaloman, навряд ли потребно с «/s».

megaloman
05-06-2013, 18:11
Iska, телепатией не страдаю, при той постановке приходится фантазировать по полной программе. Вполне возможно, надо определить наличие "\\srv1\admin" и т д, тогда задача вообще неинтересная, а я вот изобрёл способ разнообразить себе жизнь :) Вот возможный вариант @Echo Off

Call :kuku "\\Srv1\Admin"
Call :kuku "\\Srv2\Admin"
Call :kuku "\\Srv1\Admin1"
Call :kuku "\\Srv2\Admin1"

Goto :Eof

:Kuku
if exist %1 (Echo %1 имеется) Else (Echo %1 отсутствует)
Кстати, почему-то в одну строку наманер
Set A="\\Srv1\Admin\"& if exist %A% (Echo %A% имеется) Else (Echo %A% отсутствует)
у меня не получилось, что-то неверно в синтаксисе.

Iska
05-06-2013, 19:31
Iska, телепатией не страдаю, при той постановке приходится фантазировать по полной программе. »
Это — да, согласен.

Кстати, почему-то в одну строку наманер
Set A="\\Srv1\Admin\"& if exist %A% (Echo %A% имеется) Else (Echo %A% отсутствует)
у меня не получилось, что-то неверно в синтаксисе. »
Всё верно. Просто «%A%» раскрывается в момент интерпретации всей строки, целиком, т.е.:
Set A="\\Srv1\Admin\"& if exist %A% (Echo %A% имеется) Else (Echo %A% отсутствует)
Естественно, переменная окружения «A» к этому моменту пустая. Это поведение равнозначно поведению переменной окружения внутри скобок («for … do (…)», «if … (…) else (…)» и т.п.).

Вот, посмотрите:
rem @echo off
setlocal enableextensions enabledelayedexpansion


set "sPath=%~dp0" & if exist "%sPath%" (echo [%sPath%] exists) else (echo [%sPath%] not found)

endlocal
exit /b 0

E:\Песочница\0268>rem @echo off

E:\Песочница\0268>setlocal enableextensions enabledelayedexpansion

E:\Песочница\0268>set "sPath=E:\Песочница\0268\" & if exist "" (echo [] exists ) else (echo [] not found )
[] not found

E:\Песочница\0268>endlocal

E:\Песочница\0268>exit /b 0
Переменная «sPath» раскрывается в момент интерпретации строки, и потому — пуста.

Можно ещё так показать этот момент:
rem @echo off
setlocal enableextensions enabledelayedexpansion

set "sPath=bla-bla-bla"

set "sPath=%~dp0" & if exist "%sPath%" (echo [%sPath%] exists) else (echo [%sPath%] not found)

endlocal
exit /b 0

E:\Песочница\0268>rem @echo off

E:\Песочница\0268>setlocal enableextensions enabledelayedexpansion

E:\Песочница\0268>set "sPath=bla-bla-bla"

E:\Песочница\0268>set "sPath=E:\Песочница\0268\" & if exist "bla-bla-bla" (echo [bla-bla-bla] exists ) else (echo
[bla-bla-bla] not found )
[bla-bla-bla] not found

E:\Песочница\0268>endlocal

E:\Песочница\0268>exit /b 0
Вывод — нужно использовать отложенное раскрытие переменной:
rem @echo off
setlocal enableextensions enabledelayedexpansion

set "sPath=%~dp0" & if exist "!sPath!" (echo [!sPath!] exists) else (echo [!sPath!] not found)

endlocal
exit /b 0

E:\Песочница\0268>rem @echo off

E:\Песочница\0268>setlocal enableextensions enabledelayedexpansion

E:\Песочница\0268>set "sPath=E:\Песочница\0268\" & if exist "!sPath!" (echo [!sPath!] exists ) else (echo [!sPath
!] not found )
[E:\Песочница\0268\] exists

E:\Песочница\0268>endlocal

E:\Песочница\0268>exit /b 0

alek2012
07-06-2013, 17:14
Основная задача заключалась, в том что нужно было взять отключенных пользователей в АД и сравнить их названиями профилей, которые имеют такое же название своих каталогов

alek2012
07-06-2013, 18:09
еще такой вопрос, как на PS взять список названий из файла и проверить их существование в директориях например с помощью:

Test-Path \\srv1\ только список имен директорий профайлов admin, admin1, admin2 взять из 1.txt к примеру

Iska
07-06-2013, 20:47
\\srv1\ »
Не бывает таких каталогов. Это имя сервера, без указания разделённого ресурса. Или у Вас ресурсами являются как раз куча мала из «admin, admin1, admin2 …»?

$sShare = "\\srv1\Share"

Get-Content -Path "E:\Песочница\0270\1.txt" |`
ForEach-Object -Process {
"$_`t$(Test-Path -Path "$sShare\$_")"
}

alek2012
10-06-2013, 12:42
Именно ресурсами являются как раз куча мала из «admin, admin1, admin2 …

Как этот результат сохранить в файл подскажите плиз еще

уже нашел | out-file e:\result.txt

Iska
10-06-2013, 13:53
Именно ресурсами являются как раз куча мала из «admin, admin1, admin2 … »
alek2012, ясно. Но почему был выбран такой нетипичный подход?

alek2012
10-06-2013, 15:23
у меня в организации распределены рабочие столы , диски и профайлы, для того чтобы удобно было управлять ресурсами между филиалами +dfs

alek2012
11-06-2013, 16:12
Может еще подскажете как скопировать папки которые True в определенный каталог?

Iska
11-06-2013, 23:28
$sShare = "\\srv1\Share"

Get-Content -Path "E:\Песочница\0270\1.txt" |`
ForEach-Object -Process {
if(Test-Path -Path "$sShare\$_\") {
"$sShare\$_" | Copy-Item -Destination "E:\Песочница\0273" -Recurse -Force
}
}




© OSzone.net 2001-2012