String Perl脚本和日期连接删除/文件重命名问题
因此,我试图将excel文件(如“test_09182009.xlsx”)重命名为“test.xlsx”,如果该文件已经存在,则希望覆盖该文件。这是在我的本地机器上工作的,或者我是这么想的,但似乎根本不使用网络目录。有人有什么想法吗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, '_'
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
的返回值。如果您这样做了,您可能会看到它返回了一个错误。