Home > Enterprise >  Export Variable contents to file
Export Variable contents to file

Time:01-08

I have contents in a variable from GitHub and I want to export then to file automatically created o my local machine

I have tried to use

$FileContent | Out-File ('C:\Devjobs\clonefolder'   '\'   $repo.name   '\'   $srccontent.name)

It gives the error

Out-File : Could not find a part of the path 'C:\Devjobs\clonefolder\bct-common-devcomm-codegen-messages\BCT.Common.DevComm.CodeGen.Messages.sln'.
At line:1 char:18
  ... lnContent | Out-File ('C:\Devjobs\clonefolder'   '\'   $repo.name   ' ...
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : OpenError: (:) [Out-File], DirectoryNotFoundException
      FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand

CodePudding user response:

Instead of string concatenation you may want to try Join-Path for cross-platform. That being said, if you are on a Windows machine this is not likely to be your issue.

You may want to use Test-Path to verify if the path and the file exists already.

$path = 'C:' |
    Join-Path -ChildPath 'Devjobs' |
    Join-Path -ChildPath 'clonefolder' |
    Join-Path -ChildPath $repo.name
$filepath = $path | Join-Path -ChildPath $srccontent.name

If (-Not (Test-Path $path)) {
    New-Item -Type Directory -Path $path
}
If (-Not (Test-Path $filepath)) {
    Remove-Item -Path $filepath
}

$FileContent | Out-File $filepath

CodePudding user response:

As stackprotector already commented, the error shows DirectoryNotFoundException, which means you are trying to create a file in a directory that does not yet exist.

To avoid that, first create the path for the output file, then create the file.

$pathOut = Join-Path -Path 'C:\Devjobs\clonefolder' -ChildPath $repo.name
# create the folder path if it does not exist already
$null = New-Item -Path $pathOut -ItemType Directory -Force
# now write the file
$FileContent | Set-Content -Path (Join-Path -Path $pathOut -ChildPath $srccontent.name)

By using the -Force switch on New-Item you will either create the directory, OR have a DirectoryInfo object returned if the folder already existed.
In this case, we have no further need for that object, so we discard it with $null =.

Beware that this only works like that on the file system, if you would do the same on a registry key, you wil lose all content of the existing key!

Note: I use Set-Content rather than Out-File because on PowerShell versions up to and including 5.1, Out-File without using the -Encoding parameter will write the file in Unicode (UTF16-LE) encoding which may or may not be what you expect.

  •  Tags:  
  • Related