根据手册,chdir,如果可能,将工作目录更改为。EXPR
从 cmd.exe 执行此脚本时:
my $path = 'C:\\some\\path\\';
print "$path\n";
chdir("$path") or die "fail $!";
导致此输出:
C:\some\path\
但是当我返回命令提示符时 - 我仍然在原始目录中。我误解了 chdir 的目的吗?
请参阅我在 perl 脚本中{更改目录,修改我的环境}的常见问题解答。当我退出脚本时,更改为什么消失了?如何让我的更改可见?
从最严格的意义上说,它是无法完成的——脚本作为与其启动时所在的 shell 不同的进程执行。对流程的更改不会反映在其父进程中 - 只会反映在更改后创建的任何子进程中。
同样的答案也适用于 Windows。
cmd.exe
您可以通过弄乱快捷方式和/或注册表来修改后续调用或子进程的起始目录。
当一个 shell 运行一个程序时,它本质上是 fork 然后执行该程序——在这种情况下,就是你的 perl 脚本。该分叉进程中的目录已更改,然后该进程终止。然后您将返回到原来的 shell 进程。
我通过使用 perl-x
开关执行嵌入在文件中的 Perl 代码来更改目录和命令环境。
@rem = '--*-Perl-*--'
@echo off
set TMPBAT=%TMP%\%0_temp.bat
perl -x -S %0 %*
if %errorlevel% == 2000 goto cleanup
goto endofperl
#!perl
#line 9
use strict;
use warnings;
use BatchTool;
__END__
:endofperl
if exist %TMPBAT% call %TMPBAT%
:cleanup
set TMPBAT=
BatchTool
$ENV{TMPBAT}
是一个模块,如果 1) 它不存在或 2) 比源脚本旧,它会写入 DOS 命令。