I have the following code that I found on a website, it monitors a folder and saves a log in .csv. However, I need the log to contain only the name of the file I saved, without the path and extension
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$Watcher = New-Object System.IO.FileSystemWatcher
$Watcher.Path = "C:\Users\some_profile\Desktop\iguaracu_pr"
$Watcher.IncludeSubdirectories = $true
$Watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$Action = {
$Path = $Event.SourceEventArgs.FullPath
$ChangeType = $Event.SourceEventArgs.ChangeType
$LogLine = "$ChangeType, $Path"
Add-Content "C:\Users\some_profile\Pictures\Duvidas\log.csv" -Value $LogLine
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $Watcher "Created" -Action $Action
Register-ObjectEvent $Watcher "Changed" -Action $Action
Register-ObjectEvent $Watcher "Deleted" -Action $Action
Register-ObjectEvent $Watcher "Renamed" -Action $Action
while ($true) {sleep 5}
I tried to use some codes I found on another forum but they didn't work, I hope someone with more knowledge can help me
According to https://learn.microsoft.com/en-us/dotnet/api/system.io.filesystemeventargs?view=net-8.0 it looks like you need to change
FullPathtoNameto just get the file without the path information.That still leaves you with the file extension. If this was a straight forward
Get-ChildItemoutput you could simply queryBaseNamerather thanNameto get the filename without the extension, but in this instance I don't think that's an option, which just leaves doing a string replacement to remove the last characters from the name. Not tested, but this may do the trick.Note, the
-replacejust removes the last four characters from the end of the filename, eg.txt, which assumes the file has a normal 3 character extension. If it is a longer extension then you'll still have some of the extension showing. For instancemyfile.jpgbecomesmyfile, butmyfile.jpegbecomesmyfile.