【问题标题】:How can i divide copying files into priorities to copy different files如何将复制文件划分为优先级以复制不同的文件
【发布时间】:2019-11-27 13:37:52
【问题描述】:

我正在尝试构建一种在 Windows 中创建文件夹结构的方法,该结构自动基于作业编号以及他们需要多少部件。我能够使代码运行到我制作主文件夹,子文件夹和文件夹中的子文件夹的地步,其中有一部分。然而,我想做的事情是根据优先级将不同的部分转移到每个文件夹中

最多有 7 个优先级,需要除以零件的数量,因此例如有 4 个具有 4 个优先级的零件。(在此示例代码中,它创建了销售文件夹,然后在其下方放置了一个名为传送带的文件夹然后将 4 个文件夹放入带数字的传送带文件夹中)像这样的 id,根据优先级的多少将四个不同的部分放入四个不同的文件夹中)

尝试了潜水优先级,但这不起作用,因为我不明白如何存储数组来做我要求的事情

 powershell
$salesorder = read-host -prompt 'What is the customer name and salesorder number? (ex.. turnkey - 3335)'
$jobnumber = read-host -prompt 'what is the Plant folder plus job number? (ex... 930-12345)' 
$foldername = $jobnumber + " - " +  $salesorder 
#$conveyornumber = read-host -prompt "what is the number for conveyors? " + " - "
$priority = read-host -prompt "how many priorities are there?"




    ##************************* setting variables for second level basic Folder Structure *********************************

$partpath = '\\wal-file\public\sullivan\sully_temp_part.ipt'
$layout = 'D0100 - Layout'
$footprint = 'D0101 - Footprint'
$equipment = 'D01xx - Equipment'
$Guarding = 'D85xx - Guarding'
$conveyor = 'D60xx - Conveyors'

$platform = 'D90xx - Platforms'

#*************************** creating new variables based on folder name stylings *************************************

$workdir = new-item -path "C:\vault_workspace\Temp_vault\wendt\" -name $foldername -itemtype 'directory' -force
$layoutdir = new-item -path $workdir -name $layout -itemtype 'directory'
$layoutfilename = $layoutdir -join '.ipt'


#*************************** setting work directory input **************************************************************


new-item -path $layoutdir -name "$salesorder.ipt" -itemtype "file"
$footprintdir = new-item -path $workdir -name $footprint -itemtype 'directory'



$conveyordir = new-item -path $workdir -name $conveyor -itemtype 'directory'


#looping statement to create multiple folders 
$conveyorinput = read-host -prompt "how many conveyors need to be made?"

for ($i = 1; $i -le $conveyorinput; $i++){"{0:D2}" -f $number} { [system.io.directory]::CreateDirectory("$conveyordir\D51$I")}
start-sleep -seconds 5 
#creating multiple files 

$conveyorarray = Get-ChildItem $conveyordir | Where-Object {$_.PSChildname} |  Foreach-Object {$_.Name}
foreach ($path in $conveyorarray) {copy-item -path $partpath -destination "$conveyordir\$path\$jobnumber-4-$path-DUmmy-A0.ipt "}

我尝试了一些东西,结果好坏参半,这与我期待的结果不一样。我尝试过使用它,但我无法找到一种方法来实现任何接近于我要求某种形式的 If 语句可能会做到的事情,但我将它放在哪里以及它如何工作?

感谢您的帮助

【问题讨论】:

  • 我不知道你想做什么。 [blush] 您能否添加一组输入示例以及使用该输入的所需输出?
  • hmm,我不确定您还需要什么.. 如果有办法附加屏幕截图,我会这样做,如果您使用此脚本,(您可以修改正在创建的部分,您可以输入任何一组数字)您将输入销售1234,然后输入订单号1234,它将在Vault工作区文件夹中创建主文件夹1234 - 1234,然后它会询问您想要多少个传送带,您会说4和它将在传送带下创建传送带文件夹和 4 个子文件夹,然后我希望它将部件放入这些子文件夹中,但部件需要根据输入具有不同的优先级
  • 第一个将是您要作为 dir 结构基础的信息。第二个是该信息中所需的 s=dir 结构。
  • 如果您运行脚本,它会为您创建文件夹结构,它的指定不同的优先级部分就是问题所在。我有四个部分标记为 sully 样本部分 p1、p2、p3 等
  • 我还是一头雾水。 [blush] 忽略我的帖子,等待不太容易混淆的人过来帮忙。祝你好运! [咧嘴]

标签: arrays powershell directory creation


【解决方案1】:

所以我实际上完全改变了 suyntax 但我能够做到以下几点

$salesorder = read-host -prompt 'What is the customer name and salesorder number? (ex.. turnkey - 3335)'
$jobnumber = read-host -prompt 'what is the Plant folder plus job number? (ex... 930-12345)'
$topleveldir = new-item -path "C:\vault_workspace\Temp_vault\wendt\" -name "M$jobnumber - $salesorder" -ItemType 'directory'

$subfolders = "D0100 - Layout", "D0101 - Footprint", "D01xx - Equipment","D85xx - Guarding", "D60xx - Conveyors", "D90xx - Platforms", "D09XX - Chutes"

foreach($subfolder in $subfolders){new-item -path "$topleveldir" -name $subfolder -type directory }
#$partpath = '\\wal-file\public\sullivan\sully_temp_part.ipt'    

#p1
$p1conveyorinput = read-host -prompt "how many p1 conveyors need to be made?"

for ($i = 1; $i -le $p1conveyorinput; $i++) { 
$p1c = "{0:D2}" -f $i
[system.io.directory]::CreateDirectory("$topleveldir\D60xx - Conveyors\D61$p1c-p1")
copy-item -path "\\wal-file\public\sullivan\sully_temp_part.ipt" -destination "$topleveldir\D60xx - Conveyors\D61$p1c-p1\D61$p1c-p1-dummy.ipt" -force
}
start-sleep -seconds 1

我遇到的唯一问题是如何循环回到最后一条语句

#p1
$p1conveyorinput = read-host -prompt "how many p1 conveyors need to be made?"

for ($i = 1; $i -le $p1conveyorinput; $i++) { 
$p1c = "{0:D2}" -f $i
[system.io.directory]::CreateDirectory("$topleveldir\D60xx - Conveyors\D61$p1c-p1")
copy-item -path "\\wal-file\public\sullivan\sully_temp_part.ipt" -destination "$topleveldir\D60xx - Conveyors\D61$p1c-p1\D61$p1c-p1-dummy.ipt" -force
}
start-sleep -seconds 1

对于尽可能多的优先级,无需复制和更改变量(我现在要做,因为它起作用)

【讨论】:

    【解决方案2】:

    这只是一个建议,您是否可以考虑添加功能以便您的代码可读。我看不出你想要什么。如果您需要查看Write-Host 发生了什么,您是否也可以在输出中添加它。我不知道什么是 sully 样本或它与此有什么关系,所以我猜它是文件夹还是 ipt 文件?我无法阅读代码code-readability,因为除了创建目录之外,它没有传达您的意图?如果您可以省略“sully sample”语言并使用小部件,我认为我们可以更好地理解它。比如我需要 4 个 Widget 文件供 4 个人看?

        # powershell
    $salesorder = read-host -prompt 'What is the customer name and salesorder number? (ex.. turnkey - 3335)'
    $jobnumber = read-host -prompt 'what is the Plant folder plus job number? (ex... 930-12345)' 
    $foldername = $jobnumber + " - " +  $salesorder 
    #$conveyornumber = read-host -prompt "what is the number for conveyors? " + " - "
    $priority = read-host -prompt "how many priorities are there?"
    
    
    
    
    ##************************* setting variables for second level basic Folder Structure *********************************
    
    # Dunno what this file is or how it got here?
    $partpath = '\\wal-file\public\sullivan\sully_temp_part.ipt'
    $layout = 'D0100 - Layout'
    $footprint = 'D0101 - Footprint'
    $equipment = 'D01xx - Equipment' #Are these meant to be numbers or x character?
    $Guarding = 'D85xx - Guarding'
    $conveyor = 'D60xx - Conveyors'
    
    $platform = 'D90xx - Platforms'
    
    #*************************** creating new variables based on folder name stylings *************************************
    $folderArray = @() # of things you want to keep track of
    function CreateNewFolder() { 
        param( 
            $path = "C:\vault_workspace\Temp_vault\wendt\",
            $name = $foldername,
            [switch] $force
        )
    
        $newDirectory = new-item -path $path -name $name -itemtype 'directory' -force:$force
        Write-Host "Adding $name to FolderArray"
        $folderArray.Add($newDirectory)
    
        return $newDirectory 
    
    }
    $workdir = CreateNewFolder -path "C:\vault_workspace\Temp_vault\wendt\" -name $foldername -force
    #$workdir = new-item -path "C:\vault_workspace\Temp_vault\wendt\" -name $foldername -itemtype 'directory' -force
    $layoutdir = CreateNewFolder -path $workdir -name $layout 
    #$layoutdir = new-item -path $workdir -name $layout -itemtype 'directory'
    $layoutfilename = $layoutdir -join '.ipt' # Why are we joining the directory to ipt?
    
    
    #*************************** setting work directory input **************************************************************
    
    
    new-item -path $layoutdir -name "$salesorder.ipt" -itemtype "file"
    #$footprintdir = new-item -path $workdir -name $footprint -itemtype 'directory'
    $footprintdir = CreateNewFolder -path $workdir -name $footprint 
    
    
    $conveyordir = new-item -path $workdir -name $conveyor -itemtype 'directory'
    
    
    #looping statement to create multiple folders 
    $conveyorinput = read-host -prompt "how many conveyors need to be made?"
    
    for ($i = 1; $i -le $conveyorinput; $i++){
        # This just gets printed out?
        "{0:D2}" -f $number
    } 
    
    { 
        [system.io.directory]::CreateDirectory("$conveyordir\D51$I")
    }
    start-sleep -seconds 5 
    #creating multiple files 
    
    $conveyorarray = Get-ChildItem $conveyordir | Where-Object {
        $_.PSChildname
    } |  Foreach-Object { 
        @{ 
            Name = $_.Name
            FullName = $_.FullName
        }
    }
    foreach ($path in $conveyorarray) {
        $name = $_.Name
        $fullName = $_.Name
        $destination = '{0}\{1}\{2}-4-{3}-Dummy-A0.ipt' -f $conveyordir, $name, $jobnumber, $path
        copy-item -path $fullName -destination $destination # "$conveyordir\$path\$jobnumber-4-$path-DUmmy-A0.ipt "
    }
    

    【讨论】:

    • 我很难解释和提供正确的信息信息。我应该改变我仍在积极工作的部分,我认为我的问题是我看待它的方式和我有限的知识基本上是制作一个文件夹结构并将一部分放入其中......我将尝试其他一些事情现在,我会用图像和其他东西回复您。至于 sully 部分,您可以将其更改为任何内容.. 该文件是一个空白创建的文件。它不需要任何意思,除了它在那里.. 为项目和报告目的而构建它
    猜你喜欢
    • 2015-11-04
    • 2014-08-19
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多