我正在尝试编写一些代码来将具有特定名称的子文件夹移动到另一个文件夹。我使用了更改,复制,同步和删除命令,但我不确定我做错了什么。
当我运行此代码时,我的Perl Tk GUI吐出“已发布的xxx”,但文件夹实际上没有移动。同时,当我运行这些命令时,即使该文件存在于P4V中也无法识别。
以下是处理移动的代码段。
my $changelistnumber
= qx{(p4 change -o | findstr /C:Description: /C:Change: /C:Client: /C:User: /C:Status: & echo Released $folder) | p4 change -i};
$changelistnumber =~ s/[^0-9]//g;
my $printOutput
= qx{p4 copy -c $changelistnumber -v //syseng/Libraries/Concept/request_for_approval/$libfolderUnreleased/$folder/... //syseng/Libraries/Concept/released/$libfolder/$folder/...};
print "Hello!";
$printOutput
= qx{p4 sync -k //syseng/Libraries/Concept/request_for_approval/$libfolderUnreleased/$folder/...};
print "Hello1";
$printOutput
= qx{p4 delete -c $changelistnumber //syseng/Libraries/Concept/request_for_approval/$libfolderUnreleased/$folder/...};
print "Hello2";
$printOutput = qx{p4 submit -c $changelistnumber};
$d->Label(-text=> "Released $folder" )->pack();
答案 0 :(得分:2)
查看您正在运行的各种命令的输出会很有帮助 - 如果您的更改列表未在那里提交,则会在某处显示错误消息。我建议一次从命令行中输出一个命令,这样你就可以在尝试编写脚本之前知道每个命令的输出是什么样的。
我做的更改列表部分是这样的(在我的头顶,您可能需要逃避其中一些字符和/或仔细检查%change%是从{获取的正确字段) {1}}输出):
3,4,5,6,7
我还建议您使用p4 -Ztag change
代替$changenumber = `p4 --field "Description=I moved it!" change -o | p4 -Ztag -F %change% change -i`;
+ move
,如果您想拥有文件的本地副本而无需进行冗余同步({ {1}}命令只会在客户端已经同步的情况下移动文件):
copy -v
答案 1 :(得分:0)
这有什么用吗?运行时是否创建了更改列表?您正在捕获每个命令的输出,将其打印出来并查看发生了什么。 要检查的一件事是脚本运行的环境是否具有P4PORT,P4USER等的正确值。 我也同意Sam说的话,这一举动比复制/删除更有意义。即使您正在删除文件,它们仍然存在于占用空间的服务器上。加上移动保留历史记录,而副本则没有。