Как выбрать один за другим файл в папке, чтобы переименовать расширение с помощью PowerShell? - PullRequest
0 голосов
/ 19 июня 2019

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

Я до сих пор не могу понять, как переименовать его по одному, я могу переименовать только все файлы одновременно.

Function PICK_JOB
{
Write-Host "Pick 1st Job"
Get-ChildItem -Path C:\Users\F1 -File |
    ForEach-Object { Copy-Item -Path $_.FullName -Destination "C:\Users\F1\$($_.BaseName).TXT" }
} 

Function BEGIN
{
Write-Host "Creating"
& .\Folder.ps1 #execute a powershell script
Write-Host ">>>>>>Creating Finished<<<<<<"
}

#------------------------#
Function END
{
#Do some process
}
Function END_Proc
{
#Do some process
}
Function CHK
{
  if($MLG -eq "1" -and $b_UB -eq "101")
{ 
    Write-Host ">>>>>>BEGIN<<<<<"
    BEGIN
    PICK_JOB
}

if($MLG -eq "1" -and $b_UB -eq "444")
{ 
    END
    PICK_JOB
}

else
{
    END_Proc
}
}

$MLG = "1"
$b_UB = "101"
$b = CHK
$A = BEGIN

Ответы [ 4 ]

1 голос
/ 19 июня 2019

Просто чтобы уточнить, что вы делаете:

Это ваш код:

Get-ChildItem -Path C:\Users\F1 -File |
    ForEach-Object { Copy-Item -Path $_.FullName -Destination "C:\Users\F1\$($_.BaseName).TXT" }
} 

Get-ChildItem -Path C:\Users\F1 -File получает каждый -File в -Path C:\Users\F1.
| ForEach-Object {} будет делать что-то с каждым элементом , который вернула прежняя строка.
Copy-Item ... -Destination "C:\...\$($_.BaseName).TXT" скопирует элемент $_ (который является текущим объектом, который обрабатывается) и переименует его $($_.BaseName).TXT,Это (очевидно) BaseName + .TXT.

Так что да, вы переименовываете их всех за один шаг.Если вы хотите обработать предметы, вы должны сделать это внутри ForEach-Object {} -блока.Если вы хотите переименовать их по отдельности, вы должны как-то отфильтровать их с помощью операторов if внутри ForEach-Object {} -блока или перед тем, как направить (|) их в ForEach-Object {} -блок.

1 голос
/ 19 июня 2019

Возможно, я вижу что-то не так, но ...

сейчас вы

changing extansion{}
Process{}

но вам нужно

Changing extansion{
  Process{}
}

я надеюсь, что это не такнеправильно, и вы можете получить решение

0 голосов
/ 19 июня 2019

Вызовите вашу функцию процесса в данном блоке, чтобы решить вашу проблему

Get-ChildItem -Path C:\Users\F1 -File |
    ForEach-Object { 
          Copy-Item -Path $_.FullName -Destination "C:\Users\F1\$($_.BaseName).TXT" 
          # CALL YOUR PROCESS FUNCTION HERE
}
0 голосов
/ 19 июня 2019

Будет ли это работать для вас?Все, что я сделал, переставил ваш существующий function в более понятный формат.

Function PICK_JOB
{
    Write-Host "Pick 1st Job"
    Get-ChildItem -Path C:\Users\F1 -File |
    ForEach-Object {
        Copy-Item -Path $_.FullName -Destination "C:\Users\F1\$($_.BaseName).TXT"
        <#call your process here#> 
    }
}

Это вызовет ваш другой процесс после каждой файловой операции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...