BGaraiko
BGaraiko

Reputation: 141

How to add file name to (beginning of) a text file?

For over 800 files I need information that's in the file name to be included in the contents of the text file (actually .md files).

The file names are always of the same structure, something like 0000-title-text-1-23.md; only the 1-23 part changes (and that is the information I need).

I am a novice as it comes to scripting, but I figured out that this should be an easy task for PowerShell — yet I don't get it working the way I want. What did come closest:

Get-Childitem "C:\PATH\*.md" | ForEach-Object{
   $fileName = $_.BaseName
   Add-Content -Path .\*.md -Value $fileName
   }

But that adds all file names in the directory, not just the one from the file itself.

What am I doing wrong?

Upvotes: 0

Views: 1672

Answers (2)

Shadowfax
Shadowfax

Reputation: 586

Use this code to do what you exactly want,

  • it will get the last 2 parts of your filename and
  • put it in the beginning of your file content.
Get-Childitem "C:\PATH\*.md" | ForEach-Object{
   $fileNameParts = ($_.BaseName).split('-')
   $info = $fileNameParts[-2] + '-' + $fileNameParts[-1]
   $info + (Get-Content $_ -Raw) | Set-Content $_
}

Upvotes: 3

Mark Harwood
Mark Harwood

Reputation: 2415

Something like this would work although it does add the content to the end of the file:

#Get all the .txt or .md files in your location
Get-ChildItem -Filter "*.txt" | Foreach-Object{

    #Get the base name of the file
    $baseName = $_.BaseName

    #Split the base name
    $array = $baseName -Split '-'

    #Put the third and fourth element in the array into a separate variable
    #This will be added to the file
    $addToFile = $array[3] + '-' + $array[4]

    #Add the $addToFile variable to the file
    Add-Content $_.FullName -Value $addToFile
}

Upvotes: 1

Related Questions