Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
使用Powershell和RegEx将文件移动到文件夹_Powershell - Fatal编程技术网

使用Powershell和RegEx将文件移动到文件夹

使用Powershell和RegEx将文件移动到文件夹,powershell,Powershell,我编写了以下脚本,根据杂志的标题(第一个连字符之前的所有内容)将文件批处理到文件夹中: 杂志标题-年-月.pdfeg国家地理-2017-07.pdf 运行脚本后,杂志将从父文件夹移动到新的子文件夹,在本例中为“国家地理杂志” 三个相关问题: 即使没有“孤立项”,也会创建“孤立项”文件夹(第38行) 将其归档以供以后手动处理。如何制作文件夹 创造条件 重复文件会在处理过程中创建错误消息。随着脚本继续运行,这没什么大不了的,但我想用处理“孤儿”的方法处理重复项,使用一个新的“_duplicates”

我编写了以下脚本,根据杂志的标题(第一个连字符之前的所有内容)将文件批处理到文件夹中:

杂志标题-年-月.pdf
eg
国家地理-2017-07.pdf

运行脚本后,杂志将从父文件夹移动到新的子文件夹,在本例中为“国家地理杂志”

三个相关问题:

  • 即使没有“孤立项”,也会创建“孤立项”文件夹(第38行) 将其归档以供以后手动处理。如何制作文件夹 创造条件

  • 重复文件会在处理过程中创建错误消息。随着脚本继续运行,这没什么大不了的,但我想用处理“孤儿”的方法处理重复项,使用一个新的“_duplicates”文件夹/移动

  • 如何注释多行,但在每行开头没有# 行(例如,在脚本顶部)。一定有更优雅的 处理评论/文档的方式

  • 奖金问题:

    如果你真的厌倦了等待多TB的文件拷贝 你在看进度,有人能帮你写代码吗 对于第10行所示的分隔符数组(可能是错误的术语/名称)?我想要 希望能够指定的不仅仅是我在我的应用程序中使用的硬编码连字符 regex match(第26行,我花了一天的大部分时间才开始工作)


    Q1:我在我的机器上用遵循相同命名方案的PDF测试了你的脚本,它没有创建孤儿文件夹或移动我的孤儿PDF。我注意到您在foreach之后立即有一个if($\u.BaseName-match$Regex)。里面是你寻找孤儿的地方,但是孤儿不会进入这个if块,因为他们与正则表达式不匹配。在伪代码中,您的结构应该类似于:

        foreach{
              if (match)
                   {$childpath $_.BaseName -replace $Regex}
              else 
                   {Childpath = $Orphans}
              Create your folders and do your moves.
    }
    
    问题2:尝试,捕捉块:

    问题3:您可以通过成对地将多行括起来对它们进行注释


    Q1:我在我的机器上测试了你的脚本,使用的PDF遵循相同的命名方案,它没有创建孤儿文件夹或移动我的孤儿PDF。我注意到您在foreach之后立即有一个if($\u.BaseName-match$Regex)。里面是你寻找孤儿的地方,但是孤儿不会进入这个if块,因为他们与正则表达式不匹配。在伪代码中,您的结构应该类似于:

        foreach{
              if (match)
                   {$childpath $_.BaseName -replace $Regex}
              else 
                   {Childpath = $Orphans}
              Create your folders and do your moves.
    }
    
    问题2:尝试,捕捉块:

    问题3:您可以通过成对地将多行括起来对它们进行注释


    多行注释可以像这样包装在
    多行注释可以像这样包装在
    <#
     How to use an array of values for the delimiters in the regex instead of literals
     My proposed code, but I am missing how to use the delims in the regex match
     $delims = "\s-\s" ",\s"\s and\s"
    #>