Perl 用{replacestr}重命名文件和目录{searchstr}

Perl 用{replacestr}重命名文件和目录{searchstr},perl,cygwin,batch-processing,Perl,Cygwin,Batch Processing,我有一个应用程序templaify,它创建了一个模板化的目录结构,但它似乎无法用我确定的目标重命名_NAME__ 如果我能找到一种干净的方法,用替换文本重命名所有文件和目录,这是很好的 我找到了一个重命名文件的rename.pl方法,我还找到了一些代码,可以删除文件名中的下划线并用空格替换它。。。但当我修改代码以放入搜索词时,它似乎永远不会起作用 所以,基本上,我需要用类似于项目名称的东西来替换名称 我很乐意为以后的每次重用修改搜索字符串,但我想知道如何创建一个可以传递参数的文件 我在XP上,可

我有一个应用程序templaify,它创建了一个模板化的目录结构,但它似乎无法用我确定的目标重命名_NAME__

如果我能找到一种干净的方法,用替换文本重命名所有文件和目录,这是很好的

我找到了一个重命名文件的rename.pl方法,我还找到了一些代码,可以删除文件名中的下划线并用空格替换它。。。但当我修改代码以放入搜索词时,它似乎永远不会起作用

所以,基本上,我需要用类似于项目名称的东西来替换名称

我很乐意为以后的每次重用修改搜索字符串,但我想知道如何创建一个可以传递参数的文件

我在XP上,可以使用cygwin。cygwin似乎没有“rename”,这使得使用名为“rename”的函数很难找到linux类型的解决方案

我确实找到了一个很容易用于当前目录中的文件的方法,但我不知道如何让它递归到子目录中

任何帮助都会很好

谢谢, 来自cygwin的Scott:

find /cygdrive/c/mytree -type f | perl -ne 'rename $_, $1/Project-Name if m[^(.*)/__NAME__$]'
或者使用python:

import os

for root, dirs, files in os.walk("C:\\mytree"):
    for filename in files:
        if filename == "__NAME__":
            os.rename(os.path.join(root, filename), os.path.join(root, "Project-Name"))

当你说它似乎永远不会工作时,我很想看看你试过的代码。你有错误吗?还是什么都没发生?你能分享一个前后目录列表吗?我只是说我正在使用的应用程序要求我输入一个项目名称,而我输入的值从未在新创建的目录中使用过。我假设其中包含名称的目录和文件应该替换为我输入的项目名称。谢谢,但我在cygwin版本中遇到了一个错误:在-e第1行重命名函数的第一个参数后缺少逗号,靠近NAME if。我应该把这个逗号放在哪里?Thx.最好添加引号:重命名$\u1/项目名称