Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Нужна помощь с VBScript

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Ogmike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня тут есть небольшой скрипт, который копирует определенные файлы и папки. Проблема возникает, когда путь, куда надо всё ето копировать создаётся динамически.
Может у кого то будут идеи, как это сделать?
На данный момент это выглядит так:

Код:
 
sub start_Backup()
 
  Set fsObj = CreateObject("Scripting.FileSystemObject")
  Set folder = fsObj.GetFolder(folderspec)
  Set folderList = folder.SubFolders
  Set fileList = folder.Files
 
  today = WeekDay(Now)
  today = checkToday(today)
 
  destFolderPath = destFolderPath & today
 
  If Not fsObj.FolderExists(destFolderPath) Then  
    Set newFolder = fsObj.CreateFolder(destFolderPath)
  End If
 
  for each subFolder in folderList
    name = subFolder.Name
    if check(name) then
fsObj.CopyFolder subFolder, destFolderPath 'не пашет
    end if
  next
 
  for each file in fileList
    name = file.Name
    if check(name) then
fsObj.CopyFile file, destFolderPath 'не пашет
    end if
  next
   
end sub
 

Всего записей: 57 | Зарегистр. 20-03-2003 | Отправлено: 19:50 29-11-2004
merlkerry

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
fsObj.CopyFolder subFolder, destFolderPath 'не пашет  

укажи, какие значения имеют переменные в этот момент.
 
 ... или скинь весь скрипт целиком ...


----------
Вокруг одни враги.
Я испытываю естественный скептицизм по поводу чистоты человеческих намерений.

Всего записей: 1521 | Зарегистр. 16-09-2002 | Отправлено: 20:56 29-11-2004
Dimasty



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вероятно в destFolderPath надо прописывать полный путь от имени диска, а не относительный.

Всего записей: 153 | Зарегистр. 13-03-2004 | Отправлено: 10:12 30-11-2004
merlkerry

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimasty

Цитата:
destFolderPath
 
destination Required. Character string destination where the folder and subfolders from source are to be copied. Wildcard characters are not allowed
 
никто этого не просит - и с относительными работает ..
 
Ogmike
зачем ты делаешь for each subFolder in folderList , for each file in fileList ?


----------
Вокруг одни враги.
Я испытываю естественный скептицизм по поводу чистоты человеческих намерений.

Всего записей: 1521 | Зарегистр. 16-09-2002 | Отправлено: 14:45 30-11-2004
Ogmike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот на данный момент полный скрипт:
 

Код:
 
Option explicit
 
Dim fsObj,fileList,file,name
Dim folder,folderList,subFolder,newFolder
Dim today
Dim destFolderPath
 
destFolderPath = "ziel\"
const folderspec = "C:\Documents and Settings\mikapla\Desktop\ino test\"
 
call start_Backup()
 
 
'###########################################################
sub start_Backup()
 
  Set fsObj = CreateObject("Scripting.FileSystemObject")
  Set folder = fsObj.GetFolder(folderspec)
  Set folderList = folder.SubFolders
  Set fileList = folder.Files
 
  today = WeekDay(Now)
  today = checkToday(today)
 
  destFolderPath = destFolderPath & today
 
  If Not fsObj.FolderExists(destFolderPath) Then  
    Set newFolder = fsObj.CreateFolder(destFolderPath)
  End If
 
  for each subFolder in folderList
    name = subFolder.Name
    if check(name) then
fsObj.CopyFolder subFolder, destFolderPath
    end if
  next
 
  for each file in fileList
    name = file.Name
    if check(name) then
fsObj.CopyFile file, destFolderPath
    end if
  next
   
end sub
'###########################################################
 
 
'###########################################################
function check(name)
dim x
  x = InStr(1,name,"Mif",1)
 
  if x = 1 then
    check = true
  end if
 
end function
'###########################################################
 
 
'###########################################################
function checkToday(today)
 
  Select Case today
    Case "2"
      checkToday = "Montag"
    Case "3"
      checkToday = "Dienstag"
    Case "4"
      checkToday = "Mittwoch"
    Case "5"
      checkToday = "Donnerstag"
    Case "6"
      checkToday = "Freitag"
  End Select
end function
'###########################################################
 

 

Цитата:
вероятно в destFolderPath надо прописывать полный путь от имени диска, а не относительный.

я уже и так и так пробовал, никакой разницы
 
p.s. это мой первый на VBScript, может это можно сделать и лучше

Всего записей: 57 | Зарегистр. 20-03-2003 | Отправлено: 16:36 30-11-2004
merlkerry

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
тебе лучше не писать на WSH сие потому как
The CopyFolder method stops on the first error it encounters. No attempt is made to roll back any changes made before an error occurs.

----------
Вокруг одни враги.
Я испытываю естественный скептицизм по поводу чистоты человеческих намерений.

Всего записей: 1521 | Зарегистр. 16-09-2002 | Отправлено: 17:07 30-11-2004 | Исправлено: merlkerry, 17:09 30-11-2004
Ogmike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
тебе лучше не писать на WSH  

 
а как ?

Всего записей: 57 | Зарегистр. 20-03-2003 | Отправлено: 17:49 30-11-2004
merlkerry

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
создай  
 
1) cmd файл который будет принимать 2 параметра, что и куда копировать
2) vbs который будет эти параметры подготавливать и вызывать cmd файл
 
в cmd файле используй xcopy

----------
Вокруг одни враги.
Я испытываю естественный скептицизм по поводу чистоты человеческих намерений.

Всего записей: 1521 | Зарегистр. 16-09-2002 | Отправлено: 17:57 30-11-2004
Dimasty



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
создай

слегка на FromGates смахивает...тогда уж все в cmd прописывать

Всего записей: 153 | Зарегистр. 13-03-2004 | Отправлено: 09:42 01-12-2004
merlkerry

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimasty

Цитата:
слегка на FromGates смахивает...тогда уж все в cmd прописывать  

флейм разводишь
 
если знаешь как
 

Код:
 
today = WeekDay(Now)
  today = checkToday(today)  
...
function checkToday(today)
  Select Case today
    Case "2"
      checkToday = "Montag"
    Case "3"
      checkToday = "Dienstag"
    Case "4"
      checkToday = "Mittwoch"
    Case "5"
      checkToday = "Donnerstag"
    Case "6"
      checkToday = "Freitag"
  End Select
end function  
 

 
сделать через cmd - напиши - я например не знаю и думаю многим будет тоже интересно

----------
Вокруг одни враги.
Я испытываю естественный скептицизм по поводу чистоты человеческих намерений.

Всего записей: 1521 | Зарегистр. 16-09-2002 | Отправлено: 14:05 01-12-2004 | Исправлено: merlkerry, 14:07 01-12-2004
Dimasty



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
делать через cmd - напиши - я например не знаю и думаю многим будет тоже интересно

 
да...не обратил внимания. во всех примерах используются сторонние утилы. хотя был у меня пример как с помощью банальной date создать папку с актуальной датой.
 
кстати, просвети меня - разве xcopy не встанет при ошибке?

Всего записей: 153 | Зарегистр. 13-03-2004 | Отправлено: 14:14 01-12-2004
merlkerry

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
кстати, просвети меня - разве xcopy не встанет при ошибке?

/C  Continues copying even if errors occur.

----------
Вокруг одни враги.
Я испытываю естественный скептицизм по поводу чистоты человеческих намерений.

Всего записей: 1521 | Зарегистр. 16-09-2002 | Отправлено: 14:28 01-12-2004
igor andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
today = WeekDay(Now)  
  today = checkToday(today)  
...  
function checkToday(today)  
  Select Case today  
    Case "2"  
      checkToday = "Montag"  
    Case "3"  
      checkToday = "Dienstag"  
    Case "4"  
      checkToday = "Mittwoch"  
    Case "5"  
      checkToday = "Donnerstag"  
    Case "6"  
      checkToday = "Freitag"  
  End Select  
end function

А зачем вообще эта функция? У тебя русская или английская Windows, а папки обязательно нужно называть по немецки? Если нет, то в Vbscript можно сделать короче:
today=WeekDayName(WeekDay(Now))
 
И в *.cmd файле можно это же использовать:
 
@echo off
echo wscript.echo WeekDayName(WeekDay("%date%"))>#temp#.vbs
for /f %%a in ('cscript #temp#.vbs //nologo') do set weekday=%%a & del #temp#.vbs
md %weekday%
 

Цитата:
сделать через cmd - напиши - я например не знаю и думаю многим будет тоже интересно

Рабочий пример есть http://www.commandline.co.uk/lib/treeview/index.php  
Date and Time Functions -> DateToWeek (прямой линк не даю, там фреймы) Выдает день недели по введенной дате(с 1 января 1970 г). Код не очень муторный, но без комментариев, когда я сам попробовал написать батник на его основе, выдающий текущий день недели (начиная с понедельника 1 января 2001г) - то запутался Если кто поможет наваять такое, буду вельми благодарен.
 

Цитата:
во всех примерах используются сторонние утилы.

Факт, майкрософт почему то не удосужился положить такую в Windows. Но это поправимо. Делаем *.cmd (это вообще то результат debug weekday.com 1983 года выпуска)
 
@echo off
echo E 0100 B4 2A CD 21 B4 4C CD 21>_.scr
for %%a in (NWEEKDAY.COM RCX 0008 W Q) do echo %%a>>_.scr
debug<_.scr>nul
del _.scr
 
Запускаем и рядом появляется WEEKDAY.COM (8 байт, в папку, прописанную в Path его...), который будет возвращать errorlevel текущего дня недели.
И теперь в *.cmd всегда можно узнать день недели:
 
@echo off
weekday
set /a w=%errorlevel%+1
for /f "tokens=%w%" %%a in (
"Saturday Monday Tuesday Wednesday Thursday Friday Sunday"
) do set dayweek=%%a
echo today is %dayweek%
 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 12:05 08-12-2004
Dimasty



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хоть и оффтоп... но респект!

Всего записей: 153 | Зарегистр. 13-03-2004 | Отправлено: 16:16 09-12-2004
igor andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimasty
Цитата:
респект!
Да не за что. Я в последнем батнике Saturday и Sunday местами перепутал
 

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 01:42 12-12-2004 | Исправлено: igor andreev, 02:44 12-12-2004
priccolist

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, есть задача: Есть программа которая работает с базой MySQL. В программе создается заявка на работу, все данные в MySQL, нужно что бы при создании заявки если поле "А" пустое то оно принимает значение "Б". Иначе говоря: в таблице появляется строка, в ней, если в столбце "А" значение Null, то он принимает значения из другого столбца "Б". Мне посоветовали на VBS  написать, но я не понимаю...только начал осваивать этот язык (появилась задача - начал изучать)
Кто может помочь? если кто может написать?
до 2-го июля мне нужно выполнить это задание...
Заранее спасибо.

Всего записей: 51 | Зарегистр. 28-11-2008 | Отправлено: 15:41 24-06-2009
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Закладки » Нужна помощь с VBScript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru