Как использовать переменные или функции для запоминания ввода из приглашения в Powershell? - PullRequest
1 голос
/ 20 октября 2011

Мне нужно переместить файлы из одной папки в другую. Мне нужно иметь возможность выбрать, сколько файлов будет перемещено, и тогда он будет зацикливаться, пока в исходной папке больше не будет файлов. Между петлями нужно сделать перерыв. Я мог бы быть далеко. Пока что я получил такой скрипт:

    $FileCount = (ls $env:C:\users\jenstmar\desktop\*.*).count


Function Source {gci -path (Read-Host -Prompt 'Set Source') -exclude PowerFlyt |}
Function FileNumber {Get-Random -Count 4 (Read-Host -Prompt 'Set number of files to move a time') |}
Function Destination {mi -Destination (Read-Host -Prompt 'Set Destination') -exclude PowerFlyt.ps1 |}



do 
{
 Source |
 FileNumber |
 Destination |
    sleep -sec 20; .\PowerFlyt.ps1 
}
while($FileCount -gt 0) 

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Прежде всего, функции не похожи на макросы или что-то, что встроено в код.Функции вызываются и возвращают значение в конвейер.

Таким образом, вы используете как

Source |
 FileNumber |
 Destination |

и определяете функции, такие как

Функция Source {gci -path (Read-Host-Prompt 'Set Source') -exclude PowerFlyt |}

не будет работать.Измените функции без этих конечных каналов (|).

Чтобы передать переменную из узла чтения, сохраните значения чтения в переменных:

Function Source {
$script:source = read-host "set source"
gci -path $source -exclude PowerFlyt
}

Теперь вы можете получить доступ к $script:source в других функциях в скрипте.Сделайте то же самое для любой другой переменной.

1 голос
/ 21 октября 2011

Я понял это. Конечный результат был таким:

$Source = (Read-Host -Prompt 'Set Source') 
$FileNumbers = (Read-Host -Prompt 'Set number of files to move a time')
$Destination = (Read-Host -Prompt 'Set Destination') 

do 
{
$FileCount = (ls $Source).count 
gci -path $Source -exclude <NameOfScript.ps1> |
Get-Random -Count $FileNumbers | 
mi -Destination $Destination 
sleep -sec 5; 
}
while ($FileCount -gt 1)

Спасибо за вашу помощь и время.

...