Windows Vista Ultimate 64 비트에서 파일 이름 내에서 crc32 값을 확인하는 RapidCRC의 기능을 에뮬레이트하려고합니다. 그러나, 나는 어떤 종류의 논쟁의 한계에 부딪치고있는 것처럼 보입니다. Perl 스크립트 및 Windows의 SendTo에 20 개 이상의 파일을 사용할 수없는 이유는 무엇입니까?
내가 빠른 펄 스크립트를 작성 호출하는 배치 파일을 만든 다음, 나는 약 20 파일 이하를 선택하면이 위대한 작품을%APPDATA%\Microsoft\Windows\SendTo
에 배치 파일에 바로 가기를 배치, "마우스 오른쪽 버튼으로 클릭하고 보내기 "내 배치 파일 스크립트. 그러나 그 이상을 선택하면 아무런 변화가 없습니다. 나는 어떤 인물이나 논쟁의 여지가 어느 정도 있다고 생각합니다.
바라건대 나는 단순한 뭔가 빠졌고 솔루션이나 해결 방법이 너무 고통스럽지 않기를 바랍니다.
참고 :
배치 파일 (crc32_inline.bat) :
crc32_inline.pl %*
펄 노트 :
내가 사용 (딸기) 펄 v5.10.0
내 경로에 crc32.bat가있는 C : \ strawberry \ perl \ bin이 있습니다.
펄 스크립트 (crc32_inline.pl) :
#!/usr/bin/env perl
use strict;
use warnings;
use Cwd;
use English qw(-no_match_vars);
use File::Basename;
$OUTPUT_AUTOFLUSH = 1;
my $crc32_cmd = 'crc32.bat';
my $failure_report_basename = 'crc32_failures.txt';
my %failures =();
print "\n";
foreach my $arg (@ARGV) {
# if the file has a crc, check to see if it matches the calculated
# crc.
if (-f $arg and $arg =~ /\[([0-9a-f]{8})\]/i) {
my $crc = uc $1;
my $basename = basename($arg);
print "checking ${basename}... ";
my $calculated_crc = uc `${crc32_cmd} "${arg}"`;
chomp($calculated_crc);
if ($crc eq $calculated_crc) {
print "passed.\n";
}
else {
print "FAILED (calculated ${calculated_crc})\n";
my $dirname = dirname($arg);
$failures{$dirname}{$basename} = $calculated_crc;
}
}
}
print "\nReport Summary:\n";
if (scalar keys %failures == 0) {
print " All files OK\n";
}
else {
print sprintf(" %d/%d files failed crc32 validation.\n" .
" See %s for details.\n",
scalar keys %failures,
scalar @ARGV,
$failure_report_basename);
my $failure_report_fullname = $failure_report_basename;
if (defined -f $ARGV[0]) {
$failure_report_fullname
= dirname($ARGV[0]) . '/' . $failure_report_basename;
}
$OUTPUT_AUTOFLUSH = 0;
open my $fh, '>' . $failure_report_fullname or die $!;
foreach my $dirname (sort keys %failures) {
print {$fh} $dirname . "\n";
foreach my $basename (sort keys %{$failures{$dirname}}) {
print {$fh} sprintf(" crc32(%s) basename(%s)\n",
$failures{$dirname}{$basename},
$basename);
}
}
close $fh;
$OUTPUT_AUTOFLUSH = 1;
}
print sprintf("\n%s done! (%d seconds elapsed)\n" .
"Press enter to exit.\n",
basename($0),
time() - $BASETIME);
<STDIN>;
보내기 메뉴에서 직접 명령을 실행하는 경우 명령 줄 길이 제한이 적용됩니다. –
'perl ""'을 호출하는 바로 가기가 수정되었습니다. 배치 파일을 만들면 내 역할이 바보가됩니다. 필자는 원래 펄 스크립트 자체에 대한 바로 가기를 만들었으며 perl 파일 연결이 실행 가능하게되기를 바랬다. 불행히도, 나는 틀렸고 send-to 메뉴에 나타나지 않았다. 배치 파일에 스크립트를 배치하는 것은 주목할만한 입력 제한과 함께 작동합니다 (최소한 메뉴에 표시됨). 나중에 Windows 단축키가 심볼릭 링크보다 명령과 비슷하다는 것을 기억할 때까지는 아니 었습니다. 감사! –
vlee
Rob Kennedy :'cmd.exe'의 줄 길이 제한은 약 8190 자입니다. 'CreateProcess'를 전달할 수있는 최대 길이는 32767 자입니다. 정확히 무엇을 요구하는지주의하십시오. http://blogs.msdn.com/oldnewthing/archive/2003/12/10/56028.aspx – Joey