Powershell 如何使用cmd将文件重命名为子目录

Powershell 如何使用cmd将文件重命名为子目录,powershell,command-line,cmd,robocopy,Powershell,Command Line,Cmd,Robocopy,我有几个级别的文件夹,这些文件夹包含*.csv文件。我需要以下一种格式重命名这些文件: 包含文件的源子目录: C:\Folder1\Folder2\FileName1.csv C:\Folder1\Folder2\FileName2.csv ... 输出: C:\Folder1\Folder2\Folder1_Folder2_FileName1.csv C:\Folder1\Folder2\Folder1_Folder2_FileName2.csv ... 你能找个人帮忙吗 谢谢您的问题是“

我有几个级别的文件夹,这些文件夹包含*.csv文件。我需要以下一种格式重命名这些文件:

包含文件的源子目录:

C:\Folder1\Folder2\FileName1.csv
C:\Folder1\Folder2\FileName2.csv
...
输出:

C:\Folder1\Folder2\Folder1_Folder2_FileName1.csv
C:\Folder1\Folder2\Folder1_Folder2_FileName2.csv
...
你能找个人帮忙吗

谢谢

您的问题是“使用cmd”,但您已将其标记为PowerShell。我想大多数人会认为你想要一个PowerShell答案,而不是一个在老式NT命令提示符下工作的脚本

Get ChildItem
将在文件夹下生成文件列表,在您的情况下可能是Folder1。您可以只筛选以“.csv”结尾的文件,并使用
-Recurse
开关在子文件夹中递归移动

$source_files = Get-ChildItem *.csv -File -Recurse
$source\u files
变量将包括文件列表。您需要循环浏览此列表(提示:使用
foreach
)并执行以下操作:

  • 获取文件所在目录的全名
  • 将其拆分为一个由“\”字符分割的数组
  • 使用下划线字符再次连接该数组
  • 使用前面的文件夹名称重命名文件

  • 列出其他人的评论,我们不会编写您的脚本,但大多数人都乐于帮助新加入PowerShell的人朝着正确的方向前进。记住尽你所能去研究

    这是此任务的批处理文件解决方案,在顶部的主例程和底部的子例程
    RenameFile
    之间有描述

    @echo关闭
    setlocal EnableExtensions DisableDelayedExpansion
    对于/F“delims=“%%I in('dir”C:\Folder1\*.csv)/A-D/B/S 2^>nul”),请调用:重命名文件“%%I”
    端部
    后藤:EOF
    rem上述DIR命令在中的单独命令过程中执行
    rem通过命令返回。它输出所有*.csv文件的未排序列表
    在C:\Folder1或要删除的任何子目录中找到完整路径的rem文件名
    rem手柄标准件。如果未找到CSV文件,则输出错误消息
    rem由DIR处理STDERR,STDERR被重定向到设备NUL以抑制它。
    rem命令用于捕获DIR和进程写入STDOUT的所有内容
    逐行删除此输出。每一行包含一个文件名和完整的
    rem path只是传递给下面由FOR调用的子例程重命名文件。
    rem RENAME文件首先将文件名和路径分离为文件名
    rem和不带驱动器号和冒号的文件路径。从文件路径\at
    在替换文件路径中的每个反斜杠之前,删除rem开头
    用下划线表示。
    rem然后定义一个环境变量,该变量是带有
    rem转换的文件路径已从文件名中删除。这样做是为了检查
    rem CSV文件在过去没有通过预结束重命名过一次
    rem指向文件名的文件路径。那些CSV文件已经
    rem在文件重命名命令中跳过文件名中的文件路径。
    :重命名文件
    设置“文件名=%~nx1”
    设置“文件路径=%~p1”
    设置“FilePath=%FilePath:~1%”
    设置“FilePath=%FilePath:\=\ux%”
    调用集“TestName=%%文件名:%FilePath%=%%”
    如果“%TestName%”==%FileName%”ren%1“%FilePath%%FileName%”
    后藤:EOF
    
    请注意,如果CSV文件路径中的任何文件夹包含等号登录文件夹名称,则编写的批处理文件解决方案不起作用

    要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

    • 呼叫/?
    • dir/?
    • echo/?
    • endlocal/?
    • 获取/?
    • goto/?
    • 如果/?
    • rem/?
    • 设置/?
    • setlocal/?

    另请阅读Microsoft文章,了解有关
    2>nul
    的解释,其中重定向运算符
    必须在此处通过插入符号转义
    ^
    ,Windows命令解释器在分析DIR命令之前的命令行时,首先将其解释为文字字符行通过

    查找命令get childitem和rename item,在后台的单独命令过程中使用
    执行,而不使用
    ^
    。如果您在编写代码时遇到问题,请将代码发布到此处,我们将帮助您
    获取ChildItem
    ,并使用
    $\uDirectory
    $\uDirectory.Parent
    命令和
    重命名项
    可以满足您的需要-但是这里没有人会为您编写整个脚本,所以,尝试一下,当你遇到一个特定的问题时再回来。