Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] Drag-and-drop нескольких файлов на bat

Аватара для Sisin

Старожил


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

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


Подскажите, как сделать так, чтобы обрабатывались все файлы сразу за один проход, а не по одному как здесь:

Код: Выделить весь код
@echo OFF
for %%i in (%*) do (
program %%i
)
exit
т.е. допустим program поддерживает команду program file1 file2 file3....

Отправлено: 14:47, 01-08-2019

 

Ветеран


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

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


Sisin, перечислить все файлы из каталога, который перетаскивается на пакетный файл/скрипт? И в каком именно конечном виде они нужны?
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:58, 01-08-2019 | #11



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

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


Ветеран


Contributor


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

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


Sisin, Откуда берутся "file1" "file2" "file3".... ? Из аргументов при запуске скрипта? Вы выделяете эти файлы в проводнике и затягиваете выделенное на значок скрипта? Или Вам надо взять все файлы из какого-то указанного Вами каталога?
Что в аргументах скрипта при его запуске?
1. Список файлов
2. Одна папка с файлами
3. Ничего. В самом скрипте прописана папка, откуда надо взять все файлы?
4. Ничего. В самом скрипте прописан список файлов?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:36, 01-08-2019 | #12


Аватара для Sisin

Старожил


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

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


program1 получает файлы от меня путем drag-and-drop на батник, аргументы "file1|file2|file3", обрабатывает их и складывает в папку, например, C:\TEMP.
program2 забирает их из папки C:\TEMP, аргументы "file1" "file2" "file3", обрабатывает и складывает в виде одного файла рядом с батником.

PS: Хотел вторую часть сам дописать, но не получилось(((

Отправлено: 22:58, 01-08-2019 | #13


Ветеран


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

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


Sisin, а откуда пакетный файл/скрипт узнает данное имя каталога:
Цитата Sisin:
…и складывает в папку, например, C:\TEMP.
…забирает их из папки C:\TEMP, …»
?

Отправлено: 07:08, 02-08-2019 | #14


Аватара для Sisin

Старожил


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

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


Цитата Iska:
…и складывает в папку, например, C:\TEMP.
…забирает их из папки C:\TEMP, …» »
В батнике будет прописано. Это каталог (для примера), который создается при запуске батника и удаляется в конце.
В аргументах к program1 он указывается.

Отправлено: 10:21, 02-08-2019 | #15


Ветеран


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

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


Ну, например, так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Const strPath2Programm1 = "c:\Windows\System32\notepad.exe"
Const strPath2Programm2 = "c:\Windows\System32\calc.exe"

Const strPath2Folder    = "%Temp%\Some folder"

Const intWindowStyle    = 1 ' Activates and displays a window. 
                            ' If the window is minimized or maximized, 
                            ' the system restores it to its original size 
                            ' and position. An application should specify 
                            ' this flag when displaying the window 
                            ' for the first time.


Dim arrArguments()
Dim strArgument

Dim i

Dim objWshShell
Dim strPath2WorkFolder


If WScript.Arguments.Count > 0 Then
	ReDim arrArguments(WScript.Arguments.Count - 1)
	
	For i = 0 To WScript.Arguments.Count - 1
		WScript.Echo "[" & WScript.Arguments.Item(i) & "]"
		arrArguments(i) = WScript.Arguments.Item(i)
	Next
	
	Set objWshShell = WScript.CreateObject("WScript.Shell")
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If Not .FileExists(strPath2Programm1) Then
			WScript.Echo "Can't find programm file [" & strPath2Programm1 & "]."
			WScript.Quit 2
		End If
		
		If Not .FileExists(strPath2Programm2) Then
			WScript.Echo "Can't find programm file [" & strPath2Programm2 & "]."
			WScript.Quit 3
		End If
		
		For Each strArgument In arrArguments
			If Not .FileExists(strArgument) Then
				WScript.Echo "Can't find source file [" & strArgument & "]."
				WScript.Quit 4
			End If
		Next
		
		strPath2WorkFolder = objWshShell.ExpandEnvironmentStrings(strPath2Folder)
		
		If Not .FolderExists(strPath2WorkFolder) Then
			.CreateFolder strPath2WorkFolder
		End If
		
		objWshShell.Run """" & strPath2Programm1 & """ /WorkFolderParameter """ & strPath2WorkFolder & """ """ & Join(arrArguments, "|") & """", intWindowStyle, True
		objWshShell.Run """" & strPath2Programm2 & """ /WorkFolderParameter """ & strPath2WorkFolder & """ """ & Join(arrArguments, """ """) & """", intWindowStyle, True
		
		If .FolderExists(strPath2WorkFolder) Then
			.DeleteFolder strPath2WorkFolder, True
		End If
	End With
	
	Set objWshShell = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file1> [<Source file2> [...<Source fileN>]]"
	WScript.Quit 1
End If

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:02, 02-08-2019 | #16


Аватара для Sisin

Старожил


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

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


Цитата Iska:
Ну, например, так: »
Это очень круто)

Но как подправить этот вариант:

Код: Выделить весь код
@echo Off
  
  Set "A="
	For %%i In ("C:\Temp\*") Do Call Set "A=%%A%%" "%%i"
	Call Set A="%A:~1%"
        program.exe %A%   
pause
На выходе получается: program.exe " "file1" "file2" "file3". Как убрать одну лишнюю кавычку, которая идет сразу после program.exe????

Отправлено: 11:40, 02-08-2019 | #17


Ветеран


Contributor


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

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


Цитата Sisin:
program1 получает файлы от меня путем drag-and-drop на батник, аргументы "file1|file2|file3", »
При этом в аргументах скрипта file1,2,3 .... передаются полными именами (то есть полным путём: Z:\tralala\file1 ....), что, подозреваю, для program1 норма. Если program1 забросил после обработки файлы в иную, создаваемую Вами папку, то для program2 в аргументе, соответственно, надо указывать новые имена.
Вот вариант
Код: Выделить весь код
@Echo Off
cls
	Set "DirTmp=Z:\Tmp.dir"	

	If "%~1"=="" (Echo No arguments &Pause &Exit /b 2)

	If Exist "%DirTmp%" Rd /S /Q "%DirTmp%"
	Md "%DirTmp%"
	
	Set "A="
	Set "B="
rem	For %%i In (%*) Do Call Set "A=%%A%%|"%%~i"" &Call Set "B=%%A%%|"%DirTmp%\%%~nxi""
	For %%i In (%*) Do Call Set "A=%%A%%|%%~i" &Call Set "B=%%B%%|%DirTmp%\%%~nxi"
	Call Set A="%A:~1%"
	Call Set B="%B:~1%"
echo on
	program1 %A%

	program2 %B%
 	
	Rd /S /Q "%DirTmp%"
Pause
Exit /B
Результат
Цитата:
Z:\>program1 "Z:\Soft_In\file1.mp3|Z:\Soft_In\file2.mp3|Z:\Soft_In\file3.mp3|Z:\Soft_In\file4.mp3"
"program1" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Z:\>program2 "Z:\Tmp.dir\file1.mp3|Z:\Tmp.dir\file2.mp3|Z:\Tmp.dir\file3.mp3|Z:\Tmp.dir\file4.mp3"
"program2" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 02-08-2019 в 12:27.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:08, 02-08-2019 | #18


Ветеран


Contributor


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

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


Цитата Sisin:
Как убрать одну лишнюю кавычку, которая идет сразу после program.exe???? »
Не надо её убирать, надо её не делать.
Код: Выделить весь код
@Echo Off
cls
	Set "DirTmp=Z:\Tmp.dir"	

	Set "Prog=Program.exe"
	For %%i In ("%DirTmp%\*.*") Do Call Set "Prog=%%Prog%% "%%i""
echo on	
	%Prog%
Pause
Exit /B
Либо
Код: Выделить весь код
@Echo Off
cls
	Set "DirTmp=Z:\Tmp.dir"	

	Set "Arg="
	For %%i In ("%DirTmp%\*.*") Do Call Set "Arg=%%Arg%% "%%i""
echo on	
	Program.exe%Arg%
Pause
Exit /B
echo on сделано для отладки.
Результат
Цитата:
Z:\>Program.exe "Z:\Tmp.dir\file1.mp3" "Z:\Tmp.dir\file2.mp3" "Z:\Tmp.dir\file3.mp3" "Z:\Tmp.dir\file4.mp3"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 02-08-2019 в 12:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:27, 02-08-2019 | #19


Аватара для Sisin

Старожил


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

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


Супер) Собрал из частей как надо.

Остался один момент: program2 имеет аргумент вывода конечного файла вида program2 "file1" "file1" "file1" -out fileout. При запуске батника напрямую (из папки, в которой он лежит) конечный файл создается в той папке, из которой драгенддропнули файлы на батник. При запуске батника через ярлык конечный файл создается в папке с батником.

Можно ли сделать, чтобы при запуске батника через ярлык, конечный файл создавался в той папке, из которой драгенддропнули файлы на батник?

Отправлено: 13:04, 02-08-2019 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Перетаскивание (drag'n'drop) в браузерах Jaye Microsoft Windows 10 6 16-01-2016 19:23
Разное - UAC, Drag-and-drop и Photoshop alexv1962 Microsoft Windows 7 5 17-09-2011 12:56
Интерфейс - [решено] Упорядочивание папок и файлов методом Drag&Drop Bobbydream Microsoft Windows 7 3 25-11-2009 02:24
Глюк с иконками на рабочем столе: перестал работать Drag&Drop Vasosel Microsoft Windows NT/2000/2003 5 19-07-2006 09:04
Drag And Drop на JavaScript strejiok Вебмастеру 8 11-07-2006 21:42




 
Переход