Компьютерный форум 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=329556)

azisis 05-09-2017 12:51 2762760

Проверка и создание папки в сети
 
Доброго времени суток Господа.

Я начинающий системный администратор в компании где есть больше 100 ПК.
Решил немного автоматизировать работу. Но со командной строкой и ВАТ - файлами не очень знаком, то что пытаюсь сам сделать пока только маленькие ват-ники .
Прошу вашей помощи.

В доменне есть в сети 100 компов, я со своего компа под доменным админом логинюсь .
Нужен ВАТ ник который ищет на компах в доменне на диске d:\ папку work а если ее там нету то создать.

Вот сделал ват ник на своем компе работает отлично

dir e:\"WORK"
if not exist do mkdir "e:\WORK"

помогите как это все сделать и на сеттевых компах.
Заранее благодарен.

Казбек 05-09-2017 13:26 2762773

azisis,

Testing If a Drive or Directory Exists from a Batch File
Цитата:

Neither of these tests works correctly with network devices or any other device that does not have a block device-driver-controlled FAT file system (for example, when you are using Windows for Workgroups 3.11 with 32-Bit File Access enabled).

Prior to using this technique, you should know what network software the client is using, what type of server they're connecting to, and the file system the server is using.
Цитата:

Цитата azisis
if not exist do mkdir "e:\WORK" »

Правильно так:
Код:

if exist E:\Work\NUL echo "Folder already exists"

if not exist E:\Work\NUL echo "Folder does not exist"

Потому что кроме папки Work, может еще существовать файл с таким же именем, поэтому необходимо дописывать:
Код:

\NUL
Собственно обоснование простое:
Цитата:

NUL always exists on a local MS-DOS FAT drive; therefore, if C:\WIN exists, C:\WIN\NUL exists.

Kazun 05-09-2017 13:34 2762779

Для этого есть GPP - https://www.ntweekly.com/?p=9195 ,Configure a Folder Item



azisis 05-09-2017 13:52 2762781

Kazun забыл еще дописать, основной сисадмин , не дает пока мне прав доступа к АД, так что пока приходится придумывать как это сделать скриптами (((

Казбек, полезно спасибо , такого также не знал, а как сделать такое еще с сетевыми компами ?

megaloman 05-09-2017 13:58 2762784

azisis,
Код:

@Echo Off
cls

Set "ShareDisk=D$"
Set "OutFold=Work"

FOR /F %%s IN ('Net view') DO Call :Out %%s
GoTo :Eof

:Out
        Set "CompName=%1"
        If %CompName:~0,2%== \\ If Exist "%CompName%\%ShareDisk%\" (
                If Not Exist "%CompName%\%ShareDisk%\%OutFold%\" Md "%CompName%\%ShareDisk%\%OutFold%" 
        )       
GoTo :Eof

Полезная статья по net view. Возможно в net view полезно указать имя домена

Elven 05-09-2017 14:00 2762785

azisis, делать такое с сетевыми компами так же, только вместо локального диска указывается удаленный, кроме того, учетная запись, от которой выполняется скрипт, должна иметь доступ к указываемому ресурсу (upd: оказывается megaloman уже все написал).
Если основной сисадмин (надо же, какая должность забавная) не дает доступа к GPO, значит пусть сам создаст эту папку предложенным Kazun способом. Это сделать проще и надежнее чем удаленно дергать все компы - к скрипту, как минимум, придется прикручивать проверку на доступность хоста и на созданность папки.

azisis 05-09-2017 14:10 2762788

Елвен, проверка на самостоятельность, типа испытательного срока ((((
мегаломан, огромное спасибо , сейчас буду пробовать, если что можно еще за помощью будет обратится ?
а то планов куча а ума не так много (((

megaloman - а можно еще как нибудь привязать текстовый файл , например list.txt с номерами компов в доменне ?

На всех компах создало каталог work

azisis 05-09-2017 14:30 2762794

в вашем скрипте создает папку work на все ПК в сети, я например не хочу что бы на PC1, PC2 i PC10 папка work не создавалась на диске д.
Я создал текстовый файл в котором прописаны все номера ПК в домене - PC3 PC4 PC5...PC9 PC11 .... за исключением этих троих PC1, PC2 i PC10 , файл называется list.txt
хочу спросить можно что бы искало папку work на диске д только на тех компах которые прописаны в текстовом файле

то есть создавало папку work только на тех ПК которые прописаны в текстовом файле ?

Iska 05-09-2017 15:32 2762811

Цитата:

Цитата Казбек
Правильно так: »

Казбек, ещё правильнее будет так:
Код:

if exist "E:\Work\." echo Folder already exists
поскольку запись «.», означающая ссылку на сам каталог, физически присутствует в оглавлении каталога.

alpap 05-09-2017 15:35 2762813

Цитата:

Цитата azisis
за исключением »

Код:

@echo off
for /f "delims=\ " %%a in ('net view^|find "\"^|findstr /irv /c:"PC1" /c:"PC2" /c:"PC10"') do echo Действия для %%a
pause


megaloman 05-09-2017 15:46 2762816

Рискую быть подвергнутым остракизму, но мне не нравится идея отдельного файла, все компы прописал в самом батнике
Код:

@Echo Off
cls

Set "ShareDisk=D$"
Set "OutFold=Work"

FOR /F "usebackq Skip=2 tokens=1 delims=[]" %%n IN (`Find /I /N ":List_Computers" "%~dpnx0"`) DO Set /A NSkip=%%n
FOR /F "usebackq tokens=*" %%s IN (`more +%NSkip% "%~dpnx0"`) DO (If /I "%%s"=="GoTo :Eof" GoTo :Continue) &Call :Out \\%%s
:Continue

Pause
GoTo :Eof

:Out
        If Exist "%1\%ShareDisk%\" (
                If Not Exist "%1\%ShareDisk%\%OutFold%\" (
                        Md "%1\%ShareDisk%\%OutFold%"
                        If Not Exist "%1\%ShareDisk%\%OutFold%\" Echo Folder %1\%ShareDisk%\%OutFold% not created.
                ) Else (
                        Echo Folder %1\%ShareDisk%\%OutFold% already exists
                )
        ) Else (
                Echo Disk %1\%ShareDisk% not Found
        )       
GoTo :Eof

:List_Computers
PC3
PC4
PC5
PC9
PC11
GoTo :Eof

Добавил вывод информационных сообщений
По письмам трудящихся, вот с отдельным файлом
Код:

@Echo Off
cls

Set "ShareDisk=D$"
Set "OutFold=Work"
Set "ListComp=Z:\Box_In\List.txt"

FOR /F "usebackq tokens=*" %%s IN ("%ListComp%") DO Call :Out \\%%s

Pause
GoTo :Eof

:Out
        If Exist "%1\%ShareDisk%\" (
                If Not Exist "%1\%ShareDisk%\%OutFold%\" (
                        Md "%1\%ShareDisk%\%OutFold%"
                        If Not Exist "%1\%ShareDisk%\%OutFold%\" Echo Folder %1\%ShareDisk%\%OutFold% not created.
                ) Else (
                        Echo Folder %1\%ShareDisk%\%OutFold% already exists
                )
        ) Else (
                Echo Disk %1\%ShareDisk% not Found
        )       
GoTo :Eof

В файле Z:\Box_In\List.txt
Код:

PC3
PC4
PC5
PC9
PC11


azisis 05-09-2017 16:23 2762826

А куда вашу строку влепить что бы работало ?

Цитата:

Цитата alpap
@Echo Off
cls
Set "ShareDisk=D$"
Set "OutFold=Work"
FOR /F %%s IN ('Net view') DO Call :Out %%s
GoTo :Eof
:Out
Set "CompName=%1"
If %CompName:~0,2%== \\ If Exist "%CompName%\%ShareDisk%\" (
If Not Exist "%CompName%\%ShareDisk%\%OutFold%\" Md "%CompName%\%ShareDisk%\%OutFold%"
)
GoTo :Eof »

Мегаломан, Вы просто гуру батников, огромное при огромное спасибо

Еще есть несколько заданий у меня, но все же хотелось бы самому научиться писать бат файлы, может кто посоветует хорошую литературу ?

megaloman 05-09-2017 17:00 2762841

azisis,
Если все компы, кроме исключений
Код:

@Echo Off
cls

Set "ShareDisk=D$"
Set "OutFold=Work"
Set "CompExclude=PC1 PC2 P10"

FOR /F %%s IN ('Net view') DO Call :Out %%s
Pause
GoTo :Eof

:Out
        Set "CompName=%1"
        If %CompName:~0,2%==\\ Call :Exclude %1 %CompExclude%
GoTo :Eof

:Exclude
        If "%2"=="" GoTo :Eof
        If /I "%1"=="\\%2" Echo Computer %1 Excluded &GoTo :Eof
        Shift /2
        If Not "%2"=="" GoTo :Exclude
 
        If Exist "%1\%ShareDisk%\" (
                If Not Exist "%1\%ShareDisk%\%OutFold%\" (
                        Md "%1\%ShareDisk%\%OutFold%"
                        If Not Exist "%1\%ShareDisk%\%OutFold%\" (
                                Echo Folder %1\%ShareDisk%\%OutFold% not created.
                        ) Else (
                                Echo Folder %1\%ShareDisk%\%OutFold% created.
                        )
                ) Else (
                        Echo Folder %1\%ShareDisk%\%OutFold% already exists
                )
        )       
GoTo :Eof

Код "разбух" из за того, что навставлял информационных сообщений
azisis, не заставляйте меня краснеть, Iska, например, многократно меня гурее, причём в разных областях, и много много других.

azisis 06-09-2017 13:46 2763031

У меня еще возник вопрос не по этой теме , немного поискал и сделал батник для сброса статики на дхцп, но для локального компа, как можно сделать что бы на сетевом компе в домене сбрасывало статику и прописывало дхцп ?
Вот мой пример :
netsh interface ip set address name="LAN" source=dhcp
netsh interface ip set dns name="LAN" source=dhcp


как то можно сделать что бы было типа ?

\\uapc003 netsh interface ip set address name="LAN" source=dhcp
\\uapc003 netsh interface ip set dns name="LAN" source=dhcp

Iska 06-09-2017 18:01 2763136

Цитата:

Цитата azisis
У меня еще возник вопрос не по этой теме »

azisis, тут принят формат «Один вопрос — одна тема», а не «Один участник — одна тема». И Вы правильно сделали, что завели новую тему. Ответил там же.


Время: 06:31.

Время: 06:31.
© OSzone.net 2001-