Powershell : ForEach는 발견 된 모든 값을 하나로 연결하고 스크립트가 실패합니다.

로물루스

C : \ Temp \ ConversionCSV \의 모든 XLSX 파일을 감지하고 CSV로 변환하는 스크립트를 만들려고합니다. 폴더에 파일이 하나만 있으면 제대로 작동합니다.

그러나 2 개의 파일이있는 경우 ForEach는 xlsx에서 csv 로의 변환을 시도하기 전에 두 FullName 값을 하나의 값으로 "연결"합니다 (분명히 그것이 작동하는 방식입니다). 이로 인해 변환이 실패합니다. ForEach-Object도 시도했습니다.

먼저 그룹화하지 않고 각 항목에서 스크립트를 실행할 수있는 방법이 있습니까? 아니면 대안? 확장자 만 변경할 수 있습니까 (잘못된 것 같습니다)?

추신 : 더 이상 원본 스크립트의 출처를 찾을 수 없어서 저자를 인정할 수 없습니다.

스크립트:

cls
 Try {
      $Directory = "C:\temp\ConversionCSV\" 

      $ExcelFiles = (Get-ChildItem $Directory | Where Extension -Like .XLS* `
                                              | Select Name `
                                              | Format-Table -HideTableHeaders `
                                              | Out-String -ErrorAction Stop `
                                              ).trim() 


        #Files successfully detected:
        #C:\temp\ConversionCSV\copy.xlsx           
        #C:\temp\ConversionCSV\FinancialSample.xlsx


     Get-ChildItem $Repertoire | Select Name, Extension,  `
                                        BaseName, FullName, `
                                        Directory, DirectoryName `
                               | Where Extension -eq .XLSX `
                               | Out-String


      ForEach  ($ExcelFile in $ExcelFiles) 

              {
                   $xlCSV               = 6  
                   $Excel               = New-Object -comobject Excel.Application 
                   $Excel.Visible       = $False
                   $Excel.displayalerts = $False
                   ##############################################################################

                   $FullName =  $Directory+(Get-Variable -scope Local `
                                           | Where Name -EQ 'ExcelFile' `
                                           | Select Value `
                                           | Format-table -HideTableHeaders -AutoSize -Wrap `
                                           | Out-String -ErrorAction Stop).Trim()

                   Write-Host " `$FullName is $FullName"

                   ##############################################################################

                   $CSVfilename = ($FullName -Replace "XLSX", "CSV").Trim()

                   ##############################################################################

                   $Workbook = $Excel.Workbooks.Open($FullName) 
                   $Workbook.SaveAs($CSVfilename,$xlCSV) 

                   ##############################################################################

                   $NewCSV=   Get-ChildItem $Directory | Select Name, Extension, ` 
                                                                BaseName, FullName, `
                                                                Directory,  DirectoryName `
                                                       | Where  Extension -eq .CSV `
                                                       | Out-String -ErrorAction Stop

                   ##############################################################################

                   #regionCloseExcel

                  $Excel.Quit()

                   If     (Get-Process Excel)

                          {Write-Host "Closing Excel" 
                           Stop-Process -Name Excel} 

                   ElseIf (!(Get-Process Excel))

                          {Write-Host "`n Excel not runnning."}

                   Else   {Write-Host "`n Unexpected event."}

                   #endregionCloseExcel

                 }

      }


 Catch   {
          Write-Host "`n---------------------ERROR--------------`n"
          $_.Exception
          }


 Finally {Write-Host "`n----------------------END---------------"}
EylM

Excel 파일 Get-ChildItem $Repertoire을 생성하기 위해 너무 많은 코드를 요청 하고 있어야 하는 이유를 이해하기가 어렵습니다 $FullName.

작동하는 코드의 단순화 된 버전은 다음과 같습니다.

Try {
  $Directory = "C:\temp\"

  $ExcelFiles = (Get-ChildItem $Directory | Where Extension -Like ".XLS*")

  ForEach  ($ExcelFile in $ExcelFiles) {

       # grab the FullName here -> no need to parse
       $FullName = $ExcelFile.FullName

       $xlCSV               = 6  
       $Excel               = New-Object -comobject Excel.Application 
       $Excel.Visible       = $False
       $Excel.displayalerts = $False

       ##############################################################################              

       Write-Host " `$FullName is $FullName"

       ##############################################################################

       $CSVfilename = ($FullName -Replace "XLSX", "CSV").Trim()

       ##############################################################################

       $Workbook = $Excel.Workbooks.Open($FullName) 
       $Workbook.SaveAs($CSVfilename,$xlCSV) 

       ##############################################################################

       $Excel.Quit()

       If     (Get-Process Excel)

              {Write-Host "Closing Excel" 
               Stop-Process -Name Excel} 


       ElseIf (!(Get-Process Excel))

              {Write-Host "`n Excel not runnning."}


       Else   {Write-Host "`n Unexpected event."}

       #endregionCloseExcel

     }
}
Catch { Write-Host "n---------------------ERROR--------------n" $_.Exception }
Finally {Write-Host "`n----------------------END---------------"}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

유닉스는 조건의 조합을 충족하고 발견 된 모든 파일에 대해 무언가를 실행해야하는 스크립트에서 찾습니다.

분류에서Dev

개체를 반복하고 입력과 일치하는 발견 된 모든 속성을 나열합니다.

분류에서Dev

배치 스크립트 + FFmpeg-FOR 루프를 사용하여 마지막 파일을 제외하고 발견 된 모든 파일을 파이프하고 연결합니다.

분류에서Dev

Javascript Regex는 배열에 발견 된 모든 요소를 대체하고 추가합니다.

분류에서Dev

Google 스프레드 시트는 VLOOKUP과 같은 Google 스크립트를 찾고 있지만 발견 된 값을 결합하여 특정 셀에 결합합니다.

분류에서Dev

Selenium은 클래스를보고 클래스에 몇 개의 요소가 있는지 확인하고 마지막으로 발견 된 모든 요소에 대해 작업을 실행합니다.

분류에서Dev

자바 스크립트 변수에서 패턴을 찾고 발견 된 요소를 배열로 반환하는 방법은 무엇입니까?

분류에서Dev

발견 된 파일을 반복적으로 전달하여 스크립트로 제공하는 방법

분류에서Dev

모든 bash 스크립트 출력 (스크립트 내부에서)을 두 개의 파일로 리디렉션합니다. 하나는 추가하고 하나는 다시 작성합니다. 그러나 콘솔에 출력을 버리십시오

분류에서Dev

모든 bash 스크립트 출력 (스크립트 내부에서)을 두 개의 파일로 리디렉션합니다. 하나는 추가하고 하나는 다시 작성합니다. 그러나 콘솔에 출력을 버리십시오

분류에서Dev

모든 항목 또는 발견 된 히트를 반환하는 Elasticsearch 쿼리

분류에서Dev

열려있는 모든 탐색기 창을 나열하는 Powershell 스크립트

분류에서Dev

xpathSApply가있는 xmlValue는 모든 리프 값을 하나의 문자로 연결합니다.

분류에서Dev

xpathSApply가있는 xmlValue는 모든 리프 값을 하나의 문자로 연결합니다.

분류에서Dev

다른 열의 연결된 데이터가 고유한지 여부에 따라 Excel의 모든 양수 값을 합산하는 방법은 무엇입니까?

분류에서Dev

특정 값이 다른 열에서 1 회 이상 발견 된 경우 열 ID의 모든 인스턴스를 유지하는 방법

분류에서Dev

powershell 내에서 코드를 실행하는 python 스크립트로 print ( 'hello world')를 실행하는 동안 오류를 발견했습니다.

분류에서Dev

Windows 서비스가 다운 된 경우 다시 시작하고 이메일을 보내는 Powershell 스크립트

분류에서Dev

동적으로 추가 된 모든 텍스트 영역 값을 하나의 텍스트 영역에 결합

분류에서Dev

문자열 패턴의 모든 발생을 문자열이 발견 된 순서에 따라 문자열과 일치하는 숫자로 바꾸는 방법

분류에서Dev

모든 줄을 인쇄하지만 패턴과 일치하는 연속 된 줄을 연결합니다.

분류에서Dev

zabbix-발견시 수신 된 값을 테스트하는 방법

분류에서Dev

명령이 실패하면 스크립트가 실패하지만 어떤 경우에도 모든 명령을 실행합니다.

분류에서Dev

하나의 프로세스가 파이썬에서 일치하는 것을 발견하면 모든 pool.apply_async 프로세스를 중지하는 방법

분류에서Dev

~ $로 시작하는 모든 임시 파일을 삭제하려면 스크립트가 필요합니다.

분류에서Dev

스크립트는 PowerShell 콘솔을 통해 올바르게 실행되고 C #을 통해 실행하면 실패합니다.

분류에서Dev

PowerShell 스크립트에서 생성 된 XML 노드 값을 변경하는 방법을 파악하는 데 문제가 있습니다.

분류에서Dev

PowerShell 스크립트 끝에서 시작된 모든 프로세스를 자동으로 중지하는 방법

분류에서Dev

모든 스크립트에 실행 권한 (+ x)을 추가하는 방법

Related 관련 기사

  1. 1

    유닉스는 조건의 조합을 충족하고 발견 된 모든 파일에 대해 무언가를 실행해야하는 스크립트에서 찾습니다.

  2. 2

    개체를 반복하고 입력과 일치하는 발견 된 모든 속성을 나열합니다.

  3. 3

    배치 스크립트 + FFmpeg-FOR 루프를 사용하여 마지막 파일을 제외하고 발견 된 모든 파일을 파이프하고 연결합니다.

  4. 4

    Javascript Regex는 배열에 발견 된 모든 요소를 대체하고 추가합니다.

  5. 5

    Google 스프레드 시트는 VLOOKUP과 같은 Google 스크립트를 찾고 있지만 발견 된 값을 결합하여 특정 셀에 결합합니다.

  6. 6

    Selenium은 클래스를보고 클래스에 몇 개의 요소가 있는지 확인하고 마지막으로 발견 된 모든 요소에 대해 작업을 실행합니다.

  7. 7

    자바 스크립트 변수에서 패턴을 찾고 발견 된 요소를 배열로 반환하는 방법은 무엇입니까?

  8. 8

    발견 된 파일을 반복적으로 전달하여 스크립트로 제공하는 방법

  9. 9

    모든 bash 스크립트 출력 (스크립트 내부에서)을 두 개의 파일로 리디렉션합니다. 하나는 추가하고 하나는 다시 작성합니다. 그러나 콘솔에 출력을 버리십시오

  10. 10

    모든 bash 스크립트 출력 (스크립트 내부에서)을 두 개의 파일로 리디렉션합니다. 하나는 추가하고 하나는 다시 작성합니다. 그러나 콘솔에 출력을 버리십시오

  11. 11

    모든 항목 또는 발견 된 히트를 반환하는 Elasticsearch 쿼리

  12. 12

    열려있는 모든 탐색기 창을 나열하는 Powershell 스크립트

  13. 13

    xpathSApply가있는 xmlValue는 모든 리프 값을 하나의 문자로 연결합니다.

  14. 14

    xpathSApply가있는 xmlValue는 모든 리프 값을 하나의 문자로 연결합니다.

  15. 15

    다른 열의 연결된 데이터가 고유한지 여부에 따라 Excel의 모든 양수 값을 합산하는 방법은 무엇입니까?

  16. 16

    특정 값이 다른 열에서 1 회 이상 발견 된 경우 열 ID의 모든 인스턴스를 유지하는 방법

  17. 17

    powershell 내에서 코드를 실행하는 python 스크립트로 print ( 'hello world')를 실행하는 동안 오류를 발견했습니다.

  18. 18

    Windows 서비스가 다운 된 경우 다시 시작하고 이메일을 보내는 Powershell 스크립트

  19. 19

    동적으로 추가 된 모든 텍스트 영역 값을 하나의 텍스트 영역에 결합

  20. 20

    문자열 패턴의 모든 발생을 문자열이 발견 된 순서에 따라 문자열과 일치하는 숫자로 바꾸는 방법

  21. 21

    모든 줄을 인쇄하지만 패턴과 일치하는 연속 된 줄을 연결합니다.

  22. 22

    zabbix-발견시 수신 된 값을 테스트하는 방법

  23. 23

    명령이 실패하면 스크립트가 실패하지만 어떤 경우에도 모든 명령을 실행합니다.

  24. 24

    하나의 프로세스가 파이썬에서 일치하는 것을 발견하면 모든 pool.apply_async 프로세스를 중지하는 방법

  25. 25

    ~ $로 시작하는 모든 임시 파일을 삭제하려면 스크립트가 필요합니다.

  26. 26

    스크립트는 PowerShell 콘솔을 통해 올바르게 실행되고 C #을 통해 실행하면 실패합니다.

  27. 27

    PowerShell 스크립트에서 생성 된 XML 노드 값을 변경하는 방법을 파악하는 데 문제가 있습니다.

  28. 28

    PowerShell 스크립트 끝에서 시작된 모든 프로세스를 자동으로 중지하는 방법

  29. 29

    모든 스크립트에 실행 권한 (+ x)을 추가하는 방법

뜨겁다태그

보관