Форум: "Прочее";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];
ВнизКомандная строка Windows Найти похожие ветки
← →
БарЛог © (2007-07-27 10:51) [0]Всем привет! Подскажите пожалуйста:
есть диск С:\
на нём папка Data\
В ней лежат папки "natasha", "tatyana" и т.д. в которых имеются подпапки и файлы.
Хочу с помощью Bat-ника удалить все папки с именами, за исключением некоторых. (например "admin").
Подскажите пожалуйста код, как это можно реализовать в батнике.
ЗЫ. Некоторые файлы в некоторых папках на текущий момент времени могут быть заняты :(
В этом случае они должны просто игнорироваться.
ЗЗЫ. Вариант, когда сначала копируем папку "admin" в папку "резерв" и после чистки папки "data" перемещаем обратно - подойдёт.
Помогите, а то я уже всю голову сломал :(
Заранее спасибо.
← →
БарЛог © (2007-07-27 10:58) [1]cd C:\
mkdir backup-profiles
copy "C:\Data\Admin" "C:\backup"
pause
Не работает :(
Это одна из основных "камней".
------------------------------------------
rmdir /S /Q "C:\Data"
mkdir "Data"
Вроде бы удаляет как надо.
← →
Dib@zol © (2007-07-27 11:01) [2]
> cd C:\
> mkdir backup-profiles
> copy "C:\Data\Admin" "C:\backup"
> pause
Мдяя... мож лучше так: copy C:\Data\Admin\*.* C:\backup\*.*
ЗЫ учи командную строку..
← →
БарЛог © (2007-07-27 11:04) [3]Dib@zol © (27.07.07 11:01) [2]
C:\Data>mkdir "c:\reserv 2"
C:\Data>copy a\*.* "c:\reserv 2\"
a\*.*
Не удается найти указанный файл.
Скопировано файлов: 0.
C:\Data>pause
Для продолжения нажмите любую клавишу . . .
Сам учи :) Мне надо скопировать КАТАЛОГИ.
← →
ProgRAMmer Dimonych © (2007-07-27 11:07) [4]> БарЛог © (27.07.07 11:04) [3]
> Dib@zol © (27.07.07 11:01) [2]
> C:\Data>mkdir "c:\reserv 2"
> C:\Data>copy a\*.* "c:\reserv 2\"
Это что за разврат, стесняюсь спросить? Двоеточие Билл Гейтс добавит?
← →
БарЛог © (2007-07-27 11:08) [5]ProgRAMmer Dimonych © (27.07.07 11:07) [4]
это папка с именем "а" :)
← →
Игорь Шевченко © (2007-07-27 11:10) [6]xcopy ?
← →
ProgRAMmer Dimonych © (2007-07-27 11:11) [7]> БарЛог © (27.07.07 11:08) [5]
> ProgRAMmer Dimonych © (27.07.07 11:07) [4]
> это папка с именем "а" :)
Фу-у-ух, предупреждать же ж надо :)
← →
БарЛог © (2007-07-27 11:14) [8]Игорь Шевченко © (27.07.07 11:10) [6]
ВО! То, что надо! Спасибо.
← →
umbra © (2007-07-27 11:21) [9]for /F %%mydir in (`dir /A:D c:\data`) do
if /I not %%mydir=="admin" rmdir /S /Q %%mydir
← →
SlymRO © (2007-07-27 11:25) [10]
" VBScript.
" ClearTemp.vbs
Option Explicit
Dim DelFiles,var
Dim FSO,root
Dim RE,ExcludePatterns
ExcludePatterns = array("admin","dont_del")
DelFiles=false
For Each var In WScript.Arguments
if var="-delete" then
DelFiles=true
end if
Next
Set RE = New RegExp
RE.IgnoreCase = True
Set FSO = CreateObject("Scripting.FileSystemObject")
Set root= FSO.GetFolder("С:\Data")
WScript.StdOut.WriteLine ("Scan folder: " + root.Path)
DoDir root
Sub DoDir(Folder)
On Error Resume Next
Dim var
For Each var in Folder.SubFolders
if not Exclude(var.Path)
DoDelete(var)
End if
Next
For Each var In Folder.Files
DeleteFile(var.Path)
Next
End Sub
function Exclude(FileName)
Dim Pattern
For Each Pattern In Patterns
RE.Pattern = Pattern
if (Pattern<>"") then
If RE.Test(FileName) Then
Exclude =true
Exit Function
End if
End if
Next
Exclude = false
End Function
Sub DoDelete(Folder)
On Error Resume Next
Dim Item
For Each Item in Folder.SubFolders
DoDelete Item
DeleteFolder(Item.Path)
Next
For Each Item in Folder.Files
DeleteFile(Item.Path)
Next
End Sub
Private Sub DeleteFolder(FileName)
WScript.StdOut.WriteLine(FileName)
if DelFiles then
On Error Resume Next
FSO.DeleteFolder FileName
If Err.number<>0 Then
WScript.StdOut.WriteLine(Err.Description)
End If
end if
End Sub
Private Sub DeleteFile(FileName)
WScript.StdOut.WriteLine(FileName)
if DelFiles then
On Error Resume Next
FSO.DeleteFile FileName
If Err.number<>0 Then
WScript.StdOut.WriteLine(Err.Description)
End If
end if
End Sub
usage: cscript //nologo ClearTemp.vbs
← →
БарЛог © (2007-07-27 11:43) [11]umbra © (27.07.07 11:21) [9]
А как будет выглядеть, если таких папок более чем одна? (например, Админ1 и Админ2)
SlymRO © (27.07.07 11:25) [10]
Ради интереса посмотрю вечером. Спасибо.
← →
SlymRO © (2007-07-27 11:50) [12]БарЛог © (27.07.07 11:43) [11]
ExcludePatterns = array("admin","Админ1","Админ2","АдминN")
← →
SlymRO © (2007-07-27 11:53) [13]http://forum.sysadmins.ru/3/79925/
← →
БарЛог © (2007-07-27 12:10) [14]> http://forum.sysadmins.ru/3/79925/
Во, хорошая ссылочка. Пасиба.
← →
umbra © (2007-07-27 12:57) [15]в предыдущем случае надо в команду dir добавить параметр /B
Предполагаем, что папки не имеют аттрибута "только для чтения"
Записываем имена каталогов, которые не надо удалять, в файл excl.txt по одному на строчку и
for /F %%mydir in (`type excl.txt`) do attr +r c:\data\%%mydir
for /F %%mydir in (`dir /B /A:D-R c:\data`) do rmdir /S /Q %%mydir
for /F %%mydir in (`type excl.txt`) do attr -r c:\data\%%mydir
← →
umbra © (2007-07-27 12:58) [16]не attr, а attrib :(
← →
БарЛог © (2007-07-27 13:06) [17]Еще небольшой вопрос. Есть ли что-то вроде переменной окружения, в которой содержится имя компьютера? (выдается по команде "net name").
← →
БарЛог © (2007-07-27 13:07) [18]> Еще небольшой вопрос. Есть ли что-то вроде переменной окружения, в которой содержится имя компьютера? (выдается по команде "net name").
Пасиба, нашёл методом тыка :)
echo %computername%
← →
SlymRO © (2007-07-27 13:15) [19]HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerN ame\ComputerName
var WS = new ActiveXObject("WScript.Shell");
var value;
value = WS.RegRead ("HKLM\\SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ActiveComputerName\\Co mputerName");
Поблагодарил за ссылку, а пользоваться ею забыл...
← →
Empleado © (2007-07-27 13:23) [20]
> umbra ©
good !
← →
umbra © (2007-07-27 13:30) [21]редкая гадость этот виндовский шелл!! лучше вбскриптом пользоваться :)
← →
KodVer (2007-07-27 13:52) [22]
> umbra © (27.07.07 13:30) [21]
>
> редкая гадость этот виндовский шелл!! лучше вбскриптом пользоваться
> :)
>
Еще лучше bash-ем или sh-ем :)))
← →
БарЛог © (2007-08-16 15:12) [23]И снова всем привет!
Появился еще один вопрос по CMD. Отдельную тему созхдавать не хочется.
Есть несколько серверов (srv1, srv2 ...)с расшаренными (для меня) дисками C$.
В командной строке набираю: dir \\srv1\c$
Выдаёт мне список каталогов и файлов + указывает, сколько свободного места осталось.
Появилась задача написать утилиту, котоаяй после запуска выдавала бы что-то вроде:
"
srv1: 12345 mb free
srv2: 456332 mb free
...
srv(n-1): 34562 mb free
srv(n): 12207 mb free
"
Хочется реализовать оное с помощью командкой строки. Если не получится, придётся ваять на делфи.
Отсюда два вопроса:
1. Как узнать "srv1: 12345 mb free" из командной строки (без лишней информации типа списка файлов)?
2. Как узнать, сколько свободного места на сетевом расшареном диске?
Заранее спасибо.
← →
oldman © (2007-08-16 15:15) [24]А зачем командной строкой?
Проводник и клавишу DEL отменили специальным постановлением ВЦСПС?
← →
БарЛог © (2007-08-16 15:20) [25]oldman © (16.08.07 15:15) [24]
Вай, долго "вкуривал", при чем тут проводник :)
Вы на первый вопрос не отвечайте. Я его уже решил. Там нужен был именно скрипт, т.к. сервером очень много + доступ на удаление не всегда есть и не ко всем папкам (файлам). Скрипт отсутствие доступа просто игнорирует, а в проводнике приходится щелкать "пропустить".
Меня интересует вопрос в
БарЛог © (16.08.07 15:12) [23]
← →
oldman © (2007-08-16 15:47) [26]
> БарЛог © (16.08.07 15:12) [23]
> Отсюда два вопроса:
> 1. Как узнать "srv1: 12345 mb free" из командной строки
> (без лишней информации типа списка файлов)?
> 2. Как узнать, сколько свободного места на сетевом расшареном
> диске?
dir > info.txt
← →
БарЛог © (2007-08-16 15:50) [27]> dir > info.txt
А что это даст? Лишнего то не отбросит. Была идея с этой командой и последующим считыванием N-ной строки (где находятся сведения о свободном месте) из файла, но N оказалось переменной величиной, т.к. папки на диске C$ могут появляться :(
← →
oldman © (2007-08-16 15:52) [28]
> БарЛог © (16.08.07 15:50) [27]
> папки на диске C$ могут появляться :(
Батенька мой, если вы хотите в реал-тайм отслеживать фри-спейс, переходите на Дельфи.
← →
БарЛог © (2007-08-16 15:56) [29]oldman © (16.08.07 15:52) [28]
> Батенька мой, если вы хотите в реал-тайм отслеживать фри-спейс, переходите на Дельфи.
Я хочу не в реальном времени, а по запросу. На делфи написать всегда можно. Но хочется немного и моск напрячь. :)
Дата рождения: 07.02.1970 знак зодиака: Водолей VS Дата рождения: 6.12.1984 знак зодиака: Стрелец
Да кто еще из нас батенька :)
← →
oldman © (2007-08-16 15:58) [30]
> БарЛог © (16.08.07 15:56) [29]
А если по запросу, зачем [27]?
← →
БарЛог © (2007-08-16 16:07) [31]oldman © (16.08.07 15:58) [30]
Неудобно анализировать. Серверов - несколько десятков. Если сидеть и выискивать среди списка каталогов свободное место, то запаришься, ИМХО.
← →
Slym © (2007-08-17 05:40) [32]Повторюсь:
Поблагодарил за ссылку, а пользоваться ею забыл...
Там есть готовый скрипт, ну если не готовый довари и не забудь посолить
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.042 c