因此,我正在尝试将类似"test_09182009.xlsx“的excel文件重命名为"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);
所以我想当脚本不在被重命名的文件的工作目录中时,我已经隔离了它。有没有办法用重命名参数来指定呢?
发布于 2013-03-19 07:45:25
人们总是对readdir
(以及其他语言中的等价物)感到困惑的一件事是,它只返回目录中的文件名。它不返回文件的路径。因此,如果您在/home/example
中调用包含文件a
和b
的/tmp/example
上的readdir
,那么从readdir
返回的只有a
,而不是/tmp/example/a
。
通常,无论何时使用readdir
的结果,都需要使用目录名限定文件,或者将目录更改为调用readdir
的目录。
在此特定情况下,添加:
my $filePath = $sourceDir . $fileName;
到循环的顶部(我假设$sourceDir
在实际代码中有一个尾随的反斜杠;您粘贴的代码实际上并没有结束引号),然后对$filePath
而不是$fileName
执行操作。(如果$sourceDir
可以包含下划线,则需要调整此答案;在这种情况下,您可能希望首先生成转换后的文件名,然后在执行重命名之前使用$sourceDir
对它们进行限定。)
发布于 2013-03-19 06:07:04
尝试使用正斜杠而不是反斜杠。比如
my $sourceDir = "//networkPath/";
这是在我们的Windows环境中与Active Perl一起使用的。
https://stackoverflow.com/questions/15492479
复制相似问题