Показать полную графическую версию : [решено] Проверка и создание папки в сети
Доброго времени суток Господа.
Я начинающий системный администратор в компании где есть больше 100 ПК.
Решил немного автоматизировать работу. Но со командной строкой и ВАТ - файлами не очень знаком, то что пытаюсь сам сделать пока только маленькие ват-ники .
Прошу вашей помощи.
В доменне есть в сети 100 компов, я со своего компа под доменным админом логинюсь .
Нужен ВАТ ник который ищет на компах в доменне на диске d:\ папку work а если ее там нету то создать.
Вот сделал ват ник на своем компе работает отлично
dir e:\"WORK"
if not exist do mkdir "e:\WORK"
помогите как это все сделать и на сеттевых компах.
Заранее благодарен.
azisis,
Testing If a Drive or Directory Exists from a Batch File (https://support.microsoft.com/en-us/help/65994/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.
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.
Для этого есть GPP - https://www.ntweekly.com/?p=9195 ,Configure a Folder Item (https://technet.microsoft.com/en-us/library/cc730913%28v=ws.11%29.aspx?f=255&MSPPError=-2147217396)
https://i2.wp.com/www.ntweekly.com/wp-content/uploads/2015/01/011015_1048_CreateFolde1.png
https://i1.wp.com/www.ntweekly.com/wp-content/uploads/2015/01/011015_1048_CreateFolde2.png
Kazun забыл еще дописать, основной сисадмин , не дает пока мне прав доступа к АД, так что пока приходится придумывать как это сделать скриптами (((
Казбек, полезно спасибо , такого также не знал, а как сделать такое еще с сетевыми компами ?
megaloman
05-09-2017, 13:58
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. (http://cmd4win.ru/administrirovanie-seti/upravlenie-setyu/67-net-view) Возможно в net view полезно указать имя домена
azisis, делать такое с сетевыми компами так же, только вместо локального диска указывается удаленный, кроме того, учетная запись, от которой выполняется скрипт, должна иметь доступ к указываемому ресурсу (upd: оказывается megaloman уже все написал).
Если основной сисадмин (надо же, какая должность забавная) не дает доступа к GPO, значит пусть сам создаст эту папку предложенным Kazun способом. Это сделать проще и надежнее чем удаленно дергать все компы - к скрипту, как минимум, придется прикручивать проверку на доступность хоста и на созданность папки.
Елвен, проверка на самостоятельность, типа испытательного срока ((((
мегаломан, огромное спасибо , сейчас буду пробовать, если что можно еще за помощью будет обратится ?
а то планов куча а ума не так много (((
megaloman - а можно еще как нибудь привязать текстовый файл , например list.txt с номерами компов в доменне ?
На всех компах создало каталог work
в вашем скрипте создает папку work на все ПК в сети, я например не хочу что бы на PC1, PC2 i PC10 папка work не создавалась на диске д.
Я создал текстовый файл в котором прописаны все номера ПК в домене - PC3 PC4 PC5...PC9 PC11 .... за исключением этих троих PC1, PC2 i PC10 , файл называется list.txt
хочу спросить можно что бы искало папку work на диске д только на тех компах которые прописаны в текстовом файле
то есть создавало папку work только на тех ПК которые прописаны в текстовом файле ?
Правильно так: »
Казбек, ещё правильнее будет так:
if exist "E:\Work\." echo Folder already exists
поскольку запись «.», означающая ссылку на сам каталог, физически присутствует в оглавлении каталога.
за исключением »
@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
@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.txtPC3
PC4
PC5
PC9
PC11
А куда вашу строку влепить что бы работало ?
@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
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, например, многократно меня гурее, причём в разных областях, и много много других.
У меня еще возник вопрос не по этой теме , немного поискал и сделал батник для сброса статики на дхцп, но для локального компа, как можно сделать что бы на сетевом компе в домене сбрасывало статику и прописывало дхцп ?
Вот мой пример :
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
У меня еще возник вопрос не по этой теме »
azisis, тут принят формат «Один вопрос — одна тема», а не «Один участник — одна тема». И Вы правильно сделали, что завели новую тему. Ответил там же.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.