私はかなり長い間私を悩ませてきたこの問題を抱えています。次の (よく知られた) スクリプトを参照すると、おそらく最もよく説明されます。
@rem= 'PERL for Windows NT -- ccperl must be in search path
@echo off
ccperl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
@rem ';
###########################################
# Begin of Perl section
$start_dir = $ARGV[0];
#
# Fixed variable
#
$S = "\\";
$list_file = "c:".$S."list_file";
$list_add = "c:".$S."list_add";
$choosed = "c:".$S."choosed";
sub clean_file
{
$status = system("del $list_file > NUL 2> NUL");
$status = system("del $list_add > NUL 2> NUL");
$status = system("del $choosed > NUL 2> NUL");
}
#
# Start of the script...
#
printf("add-to-src-control $start_dir...\n");
clean_file();
$status = system("cleartool ls -view_only -r -s $start_dir > $list_file");
open(LIST_ELEMENT,$list_file);
while ($element=<LIST_ELEMENT>)
{
chop $element;
# printf " Processing $element ";
if ($element =~ /CHECKEDOUT/)
{
# printf(" checkedout file \n");
}
else
{
# printf " view private \n";
printf " Processing $element ...\n";
#
# For files with spaces...
#
if ($element =~ / /)
{
$status = system("cmd /c echo \"$element\" >> $list_add");
}
else
{
$status = system("cmd /c echo $element >> $list_add");
}
}
}
close(LIST_ELEMENT);
if (-e $list_add)
{
$listelement = `type $list_add`;
$listelement =~ s/\n/,/g;
$status = `echo $listelement > $list_add`;
$status = system("clearprompt list -outfile $choosed -dfile $list_add -choices
-prompt \"Choose element(s) to put over version control : \" -prefer_gui");
if ($status != 0)
{
# printf("\n Aborting ...\n");
clean_file();
exit $status;
}
#
$listtoadd = `type $choosed`;
$listtoadd =~ s/\n//g;
printf("\n cleardlg /addtosrc $listtoadd");
$status = system("cleardlg /addtosrc $listtoadd");
clean_file();
exit $status;
}
else
{
# printf("\n No files founded...\n");
clean_file();
exit $status;
}
# End of Perl section
__END__
:endofperl
これは、「 ClearCase: The Ten best scripts 」で見つけることができます。
誤解を避けるために、スクリプトは問題なく動作します。手順 (上記の Web サイトで概説) に従って、再帰的なソースへの追加コントロール機能を再現しました。
私が持っている質問(またはむしろ質問)はこれです:
ここで、特定の拡張子(*.asv
または*.dll
など) を持つファイルをソース管理に追加しないようにするにはどうすればよいでしょうか(より正確には、返される要素のリストに追加されないようにします。以下の 2 番目の質問を参照してください) 。
(フォルダも同様です。)
行は次のとおりです。
$status = system("cleartool ls -view_only -r -s $start_dir > $list_file");
焦点を当てるものは?
私の 2 番目の質問は、どちらかというと「表面的な」性質のものです。
スクリプトを実行すると生成される入力ボックスは (少なくとも私の場合は) 小さすぎて、ソース管理に追加する要素のパス全体を収容できません。
完全なパスが常に表示されるようにする方法はありますか?
それは修正の問題だろうか
$status = system("clearprompt list -outfile $choosed -dfile $list_add -choices
-prompt \"Choose element(s) to put over version control : \" -prefer_gui");
または私は完全に間違っていますか?今のところ、それがすべてだ。どんな助けでも大歓迎です!