首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Perl脚本和日期连接删除/文件重命名的问题

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

Stack Overflow用户
提问于 2013-03-19 06:00:06
回答 2查看 213关注 0票数 0

因此,我正在尝试将类似"test_09182009.xlsx“的excel文件重命名为"test.xlsx”,如果该文件已经存在,则将其覆盖。这在我的本地机器上是有效的,或者我是这么认为的,但似乎根本不能与网络目录一起工作。有谁有什么想法吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);

所以我想当脚本不在被重命名的文件的工作目录中时,我已经隔离了它。有没有办法用重命名参数来指定呢?

EN

回答 2

Stack Overflow用户

发布于 2013-03-19 07:45:25

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

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

在此特定情况下,添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my $filePath = $sourceDir . $fileName;

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

票数 2
EN

Stack Overflow用户

发布于 2013-03-19 06:07:04

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my $sourceDir = "//networkPath/";

这是在我们的Windows环境中与Active Perl一起使用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15492479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文