C 如何将基于列表的文件复制到它们相应的文件夹中(这些文件夹也是基于列表创建的)?
所以,我对脚本和批处理文件是完全陌生的 我正在根据要复制的文件列表复制文件。我有一个文本文件用于复制文件列表,我希望脚本从源目录逐行复制所有这些文件 例如,我有1000多个文件要复制,每个文件夹有3个文件要创建并放入。以下是文件名的格式示例:C 如何将基于列表的文件复制到它们相应的文件夹中(这些文件夹也是基于列表创建的)?,c,powershell,batch-file,cmd,scripting,C,Powershell,Batch File,Cmd,Scripting,所以,我对脚本和批处理文件是完全陌生的 我正在根据要复制的文件列表复制文件。我有一个文本文件用于复制文件列表,我希望脚本从源目录逐行复制所有这些文件 例如,我有1000多个文件要复制,每个文件夹有3个文件要创建并放入。以下是文件名的格式示例: file3_AB12_autoc.pdf file3_AB12.jpeg file1_AB12.png file3_CD34_autoc.pdf file3_CD34.jpeg file1_CD34.png ...etc... 复制这些文件后,我希望
file3_AB12_autoc.pdf
file3_AB12.jpeg
file1_AB12.png
file3_CD34_autoc.pdf
file3_CD34.jpeg
file1_CD34.png
...etc...
复制这些文件后,我希望将它们移动到我使用文本文件和命令创建的文件夹中:
FOR /F %i in (folders_list.txt) do md %i
现在,使用我的脚本,我想将它复制的文件移动到相应的文件夹中。基本上,如果文件名包含文件夹名,则它们应该移动到文件夹中。例如:
C:\AB12 THIS FOLDER SHOULD HAVE ALL THE FOLLOWING FILES
file3_AB12.jpeg
file3_AB12_autoc.pdf
file1_AB12.png
C:\CD34 THIS FOLDER SHOULD HAVE ALL THE FOLLOWING FILES
file3_CD34.jpeg
file3_CD34_autoc.pdf
file1_CD34.png
我查过其他类似的问题,但似乎没有什么对我想做的事情起作用。我相信下面的链接是有用的,但我不知道如何把它们放在一起
在PowerShell中,移动项将移动文件。然后,您只需要正则表达式来确定路径和新文件名,类似于:
$txt = "file3_AB12_autoc.pdf
file3_AB12.jpeg
file1_AB12.png
file3_CD34_autoc.pdf
file3_CD34.jpeg
file1_CD34.png
badfilename.txt"
foreach ($orig_file in $txt -split '\r\n') {
if ( $orig_file -match '^([^_]*)_([^_.]*)(.*)\.(.*)$' ) {
$dir = $matches[2]
$new_file = '{0}{1}.{2}' -f $matches[1], $matches[3], $matches[4]
'Moving {0} to {1}\{2}' -f $orig_file, $dir, $new_file
Move-Item -Path $orig_file -Destination ('{0}\{1}' -f $dir, $new_file)
}
else {
'{0} not processed' -f $orig_file
}
}
你好。我注意到这个问题是用C语言标记的。你在寻找C语言的解决方案吗?这听起来很模糊,你想从列表中复制文件,然后移动它们吗?从文件名/其他列表的一部分生成目录?如果第一个列表实际上类似于dir输出,那么使用一个
for/f
和另一个解析批处理解决方案中下划线和点之间部分的dir将更容易处理。对于powershell也是如此。没有必要列出目录列表。如果文件夹名是文件名的一部分,则可以解析文件名以获取目录名。最难的部分是正则表达式,其余部分可以使用PowerShell通过get Content
和Foreach
循环轻松完成。我建议添加If(!(测试路径-路径$dir-路径类型容器)){New Item-ItemType Directory-Force-Path$dir}
位于移动项
com上方,以确保在输出目录不存在时创建该目录。