Войти

Показать полную графическую версию : [решено] Присвоить атрибуты файлу/папке через скрипт


boss911
10-11-2009, 01:53
Похожая тема уже есть (http://forum.oszone.net/thread-138706.html), но она для CMD/BAT, а мне нужен VBS/WSH/JS.

Помогите, пожалуйста, сделать скрипт, который бы присваивал определенной папке, например, эта папка будет в "%ProgramFiles%", атрибут 'Скрытый'. Только самой папке, а не всем вложенным файлам\папкам в ней. Задача такова, что бы иметь один файл, который бы при запуске ничего не показывал, иначе бы без раздумий давно сделал бы скрипт на CMD. Зарание спасибо.

amel27
10-11-2009, 03:43
скрипт, который бы присваивал определенной папке, например, эта папка будет в "%ProgramFiles%", атрибут 'Скрытый'. »
strDIR = "C:\Program Files\Microsoft.NET"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDIR = objFSO.GetFolder(strDIR)

objDIR.Attributes = 2


полный список атрибутов: http://msdn.microsoft.com/en-us/library/5tx15443(VS.85).aspx

boss911
10-11-2009, 04:19
amel27, стоп, а переменные, что нельзя указывать? Кричит, что неверный путь, у-у-у, это очень плохо, не интересно тогда. Как будет выглядеть скрипт, если мне двум разным папкам надо задать атрибут, а так же как будет выглядеть скрипт, если обеим файлам нужно задать разные атрибуты.

amel27
10-11-2009, 05:48
boss911, где-то так:
Set objShell = WScript.CreateObject("WScript.Shell")

strPrograms = objShell.ExpandEnvironmentStrings("%ProgramFiles%")
strWinDir = objShell.ExpandEnvironmentStrings("%WinDir%")

AttribFolder strPrograms & "\Microsoft.NET", 2
AttribFolder strPrograms & "\Microsoft Office", 2

AttribFile strWinDir & "\regedit.exe", 2
AttribFile strWinDir & "\winhelp.exe", 2

'--------------------------
'Пользовательские процедуры
'--------------------------
Sub AttribFolder(strPath, intAttrib)
Dim objFSO, objDIR

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDIR = objFSO.GetFolder(strPath)

objDIR.Attributes = intAttrib
End Sub
'--------------------------
Sub AttribFile(strPath, intAttrib)
Dim objFSO, objFLE

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFLE = objFSO.GetFile(strPath)

objFLE.Attributes = intAttrib
End Sub
'--------------------------

Iska
10-11-2009, 06:19
boss911, можно и переменные окружения, только надо их дополнительно «развернуть». По приведённому в #2 (http://forum.oszone.net/post-1266301-2.html) коду:
strDIR = "%ProgramFiles%\Microsoft.NET"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

Set objFolder = objFSO.GetFolder(objWshShell.ExpandEnvironmentStrings(strDIR))

objFolder.Attributes = 2

Или указывать имя каталога как аргумент при вызове скрипта:
Option Explicit

Dim objArgs
Dim objFSO
Dim strFolder, lngErrLevel

Set objArgs = WScript.Arguments

If objArgs.Count = 1 Then
strFolder = objArgs.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(objFSO.GetAbsolutePathName(strFolder)) Then
objFSO.GetFolder(strFolder).Attributes = 2
lngErrLevel = 0
Else
lngErrLevel = 2
End If

Set objFSO = Nothing
Else
lngErrLevel = 1
End If

Set objArgs = Nothing

WScript.Quit lngErrLevel
например:
wscript.exe "C:\Песочница\34\Sample.vbs" "%ProgramFiles%\Microsoft.NET"
Ежели потребно, в вызывающей программе можно анализировать код возврата (можно убрать — приведено только в качестве примера).




© OSzone.net 2001-2012