Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将基于列表的文件复制到它们相应的文件夹中(这些文件夹也是基于列表创建的)?_C_Powershell_Batch File_Cmd_Scripting - Fatal编程技术网

C 如何将基于列表的文件复制到它们相应的文件夹中(这些文件夹也是基于列表创建的)?

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... 复制这些文件后,我希望

所以,我对脚本和批处理文件是完全陌生的

我正在根据要复制的文件列表复制文件。我有一个文本文件用于复制文件列表,我希望脚本从源目录逐行复制所有这些文件

例如,我有1000多个文件要复制,每个文件夹有3个文件要创建并放入。以下是文件名的格式示例:

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上方,以确保在输出目录不存在时创建该目录。