Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Perl脚本和日期连接删除/文件重命名问题_String_Perl_File Io - Fatal编程技术网

String Perl脚本和日期连接删除/文件重命名问题

String Perl脚本和日期连接删除/文件重命名问题,string,perl,file-io,String,Perl,File Io,因此,我试图将excel文件(如“test_09182009.xlsx”)重命名为“test.xlsx”,如果该文件已经存在,则希望覆盖该文件。这是在我的本地机器上工作的,或者我是这么想的,但似乎根本不使用网络目录。有人有什么想法吗 my $sourceDir = "\\networkPath\; opendir ( DIR, $sourceDir ); foreach my $fileName (readdir(DIR)) { if (index($fileName, '_'

因此,我试图将excel文件(如“test_09182009.xlsx”)重命名为“test.xlsx”,如果该文件已经存在,则希望覆盖该文件。这是在我的本地机器上工作的,或者我是这么想的,但似乎根本不使用网络目录。有人有什么想法吗

my $sourceDir = "\\networkPath\;

opendir ( DIR, $sourceDir );

foreach my $fileName (readdir(DIR)) 
{


    if (index($fileName, '_') != -1) 
    {
        rename($fileName, substr($fileName,0,index($fileName, '_')).".xlsx");
    } 
}
closedir(DIR);

因此,我认为我将它隔离到脚本不在重命名文件的工作目录中时。有没有办法通过重命名参数来指定这一点?

尝试使用正斜杠而不是反斜杠。比如

my $sourceDir = "//networkPath/";

这是在我们的Windows环境中使用活动Perl实现的

人们总是对
readdir
(以及其他语言中的等价物)感到困惑的一点是,它只返回目录中的文件名。它不返回文件的路径。因此,如果您在
/home/example
中,并在
/tmp/example
上调用
readdir
,其中包含
a
b
,那么您从
readdir
中得到的只是
a
,而不是
/tmp/example/a

通常,无论何时使用
readdir
的结果,都需要使用目录名限定文件,或者将目录更改为调用
readdir
的目录

在此特定情况下,添加:

my $filePath = $sourceDir . $fileName;

到循环的顶部(我假设
$sourceDir
在实际代码中有一个尾随的反斜杠;粘贴的代码实际上没有关闭引号),然后对
$filePath
执行操作,而不是
$fileName
。(如果
$sourceDir
可以包含下划线,则需要调整此答案;在这种情况下,您可能需要先生成转换后的文件名,然后在重命名之前使用
$sourceDir
对其进行限定。)

这是否在Windows中运行?您没有检查
opendir
的返回值。如果您这样做了,您可能会看到它返回了一个错误。