Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - перемещение файлов

Ответить
Настройки темы
CMD/BAT - перемещение файлов

Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: NibelungXXX
Дата: 02-12-2013
необходимо перемещать по 50 файлов в папку D:\in с папки D:\pak если папка D:\in пуста.


Разобрался и уже написал)

Отправлено: 19:47, 01-12-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата NibelungXXX:
2) необходимо перемещать по 50 файлов в папку D:\in с папки D:\pak если папка D:\pak пуста. »
Если папка «D:\pak» пуста, как можно оттуда что-то перемещать?

Отправлено: 05:23, 02-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 29
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ачепятка вышла, если папка D:\in конечно становится пуста

Отправлено: 05:45, 02-12-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


NibelungXXX, на WSH:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strSourceFolder
Dim strDestFolder

Dim objFSO

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemSink


strSourceFolder = "E:\Песочница\0334\Source"
strDestFolder   = "E:\Песочница\0334\Destination"

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

If objFSO.FolderExists(strSourceFolder) Then
	If objFSO.FolderExists(strDestFolder) Then
		strComputer = "."
		
		Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
		Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
		Set objSWbemSink       = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")
		
		With objSWbemServicesEx.Get("Win32_Directory.Name='" & Replace(strDestFolder & "\.", "\", "\\") & "'")
			objSWbemServicesEx.ExecNotificationQueryAsync objSWbemSink, _
				"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
				"TargetInstance ISA 'CIM_DataFile' AND " & _
				"TargetInstance.Drive = '" & .Drive & "' AND " & _
				"TargetInstance.Path = '"  & .Path  & "'"
			
			Do
				WScript.Sleep 100
			Loop
			
			objSWbemSink.Cancel
			
			Set objSWbemSink       = Nothing
			Set objSWbemServicesEx = Nothing
			Set objSWbemLocator    = Nothing
		End With
	Else
		WScript.Echo "Destination folder [" & strDestFolder & "] not found."
		WScript.Quit 2
	End If
Else
	WScript.Echo "Source folder [" & strSourceFolder & "] not found."
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub Sink_OnObjectReady(objSWbemObjectEx, objSWbemAsyncContext)
	Const intMaxCount = 5
	
	Dim intCount
	Dim objFile
	
	If objSWbemObjectEx.Path_.Class = "__InstanceDeletionEvent" Then
		If objFSO.GetFolder(strDestFolder).Files.Count = 0 Then
			intCount = 0
			
			For Each objFile In objFSO.GetFolder(strSourceFolder).Files
				objFile.Move strDestFolder & "\"
				
				intCount = intCount + 1
				
				If intCount >= intMaxCount Then
					Exit For
				End If
			Next
		End If
	End If
End Sub
'=============================================================================

Есть ряд тонкостей.

Поскольку критерием инициации процесса было задано отсутствие файлов во второй папке, и в скрипте используется подписка на события удаления файлов из второй папки, то первая тонкость такова: если в момент запуска скрипта вторая папка была уже пуста — нужно создать в ней/скопировать в неё какой-либо файл и затем сразу удалить его. Вторая тонкость: если в момент работы скрипта обе папки окажутся пустыми, то он никак не отреагирует на добавление файлов в первую папку, и опять понадобится проделать ту же самую операцию — создать во второй папке/скопировать в неё какой-либо файл и затем сразу удалить его.

Чтобы избавиться от подобных «тараканов», нужно в столовой, где я работаю, взять полпорции суточных щей… изменить техзадание, и следить не только за состоянием второй папки (события удаления файла), но и за состоянием первой, исходной папки (события создания файлов).

Отправлено: 06:21, 04-12-2013 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - перемещение файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Перемещение файлов с условием PAlkovnic Скриптовые языки администрирования Windows 2 20-06-2013 10:12
CMD/BAT - перемещение файлов titik Скриптовые языки администрирования Windows 0 03-08-2012 15:46
CMD/BAT - Перемещение файлов по маске SanyaJoker Скриптовые языки администрирования Windows 0 17-11-2011 12:54
CMD/BAT - Перемещение файлов с переименованием Unm Скриптовые языки администрирования Windows 1 15-10-2011 12:20
CMD/BAT - [решено] Создание папок по дате получения файлов и перемещение в них файлов KamikadZZe Скриптовые языки администрирования Windows 1 01-09-2011 14:15




 
Переход