Программное обеспечение с открытым исходным кодом стоит дороже в долгосрочной перспективе
Для обычных компаний, занимающихся линейным бизнесом, Open Source выглядит бесплатно, но имеет скрытые затраты.
Если принять во внимание несоответствие качества, удобства использования и UI / UX, трудности взаимодействия и стандартов, расширенную конфигурацию, связанную с этим повышенную потребность в обучении и поддержке, общая стоимость владения открытым исходным кодом намного выше, чем в коммерческих предложениях. .
Технически подкованные программисты берут освобождение Open Source и работают с ним; они «получают» и могут принять его и настроить в соответствии со своими целями. С другой стороны, предприятия, которые в основном являются нетехническими, но нуждаются в программном обеспечении для управления своими офисами, сетями и веб-сайтами, подвергаются риску боли для себя и больших затрат с точки зрения потерянного времени, производительности и (в конечном итоге) поддержки сборы и / или стоимость отказа от эксперимента все вместе.
ОБНОВЛЕНИЕ: Вопреки моему первоначальному утверждению, что следующий код не работает, похоже, он действительно работает. Я просто забыл, что файл, который я хотел удалить, находился не в $ ENV {TEMP}
, а в подкаталоге $ ENV {TEMP}
. Проблема в том, что файл не попадает в корзину.
Правильным решением является использование Win32 :: FileOp , но я собираюсь оставить этот скрипт здесь в качестве примера использования Win32 :: API и Win32 :: API :: Struct . Я был бы признателен, если бы кто-нибудь указал, что я делаю неправильно. Для справки:
SHFileOperation
: http://msdn.microsoft.com/en-us/library/bb762164 (VS.85) .aspx
LPSHFILEOPSTRUCT
: http://msdn.microsoft.com/en-us/library/bb759795(VS.85). aspx
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw( catfile );
use Win32::API;
Win32::API::Struct->typedef(
SHFILEOPSTRUCT => qw(
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;
)
);
Win32::API->Import(
shell32 => q{ int SHFileOperation( LPSHFILEOPSTRUCT lpFileOp ) }
);
my $op = Win32::API::Struct->new( 'SHFILEOPSTRUCT' );
$op->{wFunc} = 0x0003; # FO_DELETE from ShellAPI.h
$op->{fFlags} = 0x0040; # FOF_ALLOWUNDO from ShellAPI.h
my $to_delete = catfile( $ENV{TEMP}, "test.file" );
$op->{pFrom} = $to_delete . "\0\0";
my $result = SHFileOperation( $op );
if ( $result ) {
warn sprintf "The operation failed: %4.4X\n", $result;
}
else {
if ( $op->{fAnyOperationsAborted} ) {
warn "Operation was aborted\n";
}
else {
warn "The operation succeeded\n";
}
}
__END__
Win32 :: Модуль FileOp имеет функцию Recycle
. Из документации:
Recycle @filenames
Отправьте файлы в корзину. Вы не получите никаких диалоговых окон подтверждения. В случае успеха возвращает true.
Напишите сценарий VBS ( Исходная ссылка ), затем вызовите его с помощью MyDelScript.vbs
function main()
{
if (WScript.Arguments.length != 1)
{
WScript.Echo("<Insert informative error message here>");
return;
}
var Path = WScript.Arguments(0);
var Shell = WScript.CreateObject("Shell.Application");
var Item = Shell.Namespace(0).ParseName(Path);
Item.InvokeVerb("delete");
}
Вы можете использовать утилиту «recycle», которая является частью CmdUtils из MaDdoG Software . Из списка на странице -
Я бы посоветовал вам попробовать его различные переключатели, прежде чем включать его в свой скрипт - их довольно много отклонения от поведения по умолчанию команды "del".