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

Показать сообщение отдельно

Ветеран


Contributor


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

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


palexa,
Гибрид bat и js.
Код: Выделить весь код
@set @E=1; /*

@Echo Off
	Set "Drive=E"

copy E:\testfile.pdf E:\zzzzzzzzzzzzzzz >nul

	FOR /F "usebackq delims=" %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Min=%%n"

del E:\zzzzzzzzzzzzzzz 

	FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Max=%%n"
	FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 1 %N_Max% %N_Min% 2`) DO Set "Delta=%%n"

	Echo %N_Max%
	Echo %N_Min%
	Echo %Delta%
GoTo :Eof
*/

// Arg 1 = Drive
// Arg 2 = 0 Echo Free space of drive
// Arg 2 = 1 
// Arg 3 =Space1
// Arg 4 =Space2
// Arg 5 =0(Byte) 1(Kbyte) 2(Mbyte) 3(Gbyte)

var i;
var oArg = WScript.Arguments;

var nArg=oArg.Count(); 
if (nArg<2) {
	WScript.Echo("Error!_Invalid_number_of_arguments!");
	WScript.Quit(1);
}

if (oArg(1)==0){
	var FSO=WScript.CreateObject("Scripting.FileSystemObject");
	try {var D=FSO.GetDrive(oArg(0)+":")}
	catch (e) {
		if (e != 0) {
			WScript.Echo("Error!_" + oArg(0) + ":_not_exist!");
			WScript.Quit(2);
		}
	}
	WScript.Echo(D.FreeSpace);
	WScript.Quit(0);
}

if (oArg(1)==1){
	if (nArg<5) {
		WScript.Echo("Error!_Invalid_number_of_arguments!");
		WScript.Quit(1);
	}
	var D=oArg(2)-oArg(3);
	if (oArg(4)==0) {WScript.Echo(D);WScript.Quit(0)}
	if (oArg(4)==1) {WScript.Echo(Math.round(D/1024));WScript.Quit(0)}
	if (oArg(4)==2) {WScript.Echo(Math.round(D/1024/1024));WScript.Quit(0)}
	if (oArg(4)==3) {WScript.Echo(Math.round(D/1024/1024/1024));WScript.Quit(0)}
	WScript.Echo("Error!_Wrong_argument_of_size!");
	WScript.Quit(3);
}
Первый и второй вызов в For - свободное место на указанном диске
третий вызов - калькулятор разности двух чисел
Приходится привлекать для этого js, так как в cmd с большими числами работать затруднительно
В приведенном примере перед первым вызовом копируется тестовый файл,
после первого - его удаление
после третего - разность второго и первого
Если надо сетевой путь
Код: Выделить весь код
@set @E=1; /*

@Echo Off
	Set "NetPath=\\Server\Test1"
	Pushd "%NetPath%" || (
		Echo Wrong path "%NetPath%"
		Pause
		GoTo :Eof
	)
	FOR /F "usebackq delims=:" %%n IN (`cd`) DO Set "Drive=%%n"

copy E:\Test.pdf %Drive%:\zzzzzzzzzzzzzzz >nul

	FOR /F "usebackq delims=" %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Min=%%n"

del %Drive%:\zzzzzzzzzzzzzzz 

	FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Max=%%n"
	FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 1 %N_Max% %N_Min% 1`) DO Set "Delta=%%n"

	Popd

	Echo %N_Max%
	Echo %N_Min%
	Echo %Delta%
GoTo :Eof
*/

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


Последний раз редактировалось megaloman, 24-11-2018 в 01:06.

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

Отправлено: 00:47, 24-11-2018 | #6