Powershell 如何使用cmd将文件重命名为子目录
我有几个级别的文件夹,这些文件夹包含*.csv文件。我需要以下一种格式重命名这些文件: 包含文件的源子目录: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 ... 你能找个人帮忙吗 谢谢您的问题是“
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
命令和重命名项
可以满足您的需要-但是这里没有人会为您编写整个脚本,所以,尝试一下,当你遇到一个特定的问题时再回来。