CMD neueste geschriebene Datei umbenennen
Abend,
Ich habe einen Ordner in denen ich Replays von Games abspeichere. Diese werden aber mit einem ziemlich Aussagelosem Titel gespeichert (z.B. Replay_2020.06.20-20.37).
Anstelle des "Replay" soll dort der Name des aktuellen Spiels stehen (also der aktuellen Vollbildanwendung).
Also soll die Batch die neueste, geschriebene Datei mit den Namen des aktuellen Spiels umbennen. Dabei sollen aber nur Dateien umbenannt werden die während der Batch erstellt wurden (damit nicht einfach die neueste Datei umbenannt wird sobald ich die Batch starte).
Ich habe eine loop gefunden die die neuste geschriebene Datei einfach die neueste Datei anzeigt:
Wie krieg ich es hin damit die Batch nur Dateien berücksichtigt die während des Batch Prozesses geschrieben wurden?
Und wie krieg ich den Namen der aktuellsten Vollbildanwendung heraus?
Gruß,
Bruno
Ich habe einen Ordner in denen ich Replays von Games abspeichere. Diese werden aber mit einem ziemlich Aussagelosem Titel gespeichert (z.B. Replay_2020.06.20-20.37).
Anstelle des "Replay" soll dort der Name des aktuellen Spiels stehen (also der aktuellen Vollbildanwendung).
Also soll die Batch die neueste, geschriebene Datei mit den Namen des aktuellen Spiels umbennen. Dabei sollen aber nur Dateien umbenannt werden die während der Batch erstellt wurden (damit nicht einfach die neueste Datei umbenannt wird sobald ich die Batch starte).
Ich habe eine loop gefunden die die neuste geschriebene Datei einfach die neueste Datei anzeigt:
for /f %%i in ('dir /b/a-d/od/t:c') do set LAST=%%i
echo The most recently created file is %LAST%
Wie krieg ich es hin damit die Batch nur Dateien berücksichtigt die während des Batch Prozesses geschrieben wurden?
Und wie krieg ich den Namen der aktuellsten Vollbildanwendung heraus?
Gruß,
Bruno
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 580869
Url: https://administrator.de/forum/cmd-neueste-geschriebene-datei-umbenennen-580869.html
Ausgedruckt am: 05.04.2025 um 14:04 Uhr
2 Kommentare
Neuester Kommentar
Keine Chance so etwas mit Batch zu erledigen.
Proof of concept für PowerShell:
Die PowerShell Profis können es aber vermutlich besser als ich.
Steffen
Proof of concept für PowerShell:
$c=Add-Type -Name pInv -PassThru -MemberDefinition @'
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint processId);
[DllImport("shell32.dll")]
public static extern int SHQueryUserNotificationState(ref int state);
'@
function Wait-ForFullScreenProc {
$state=0
do {
sleep -m 10
$hresult=$c::SHQueryUserNotificationState([ref]$state)
} until (-not $hresult -and ($state -in 2..4))
}
function global:Get-FullScreenProcName {
$procid=[UInt32]0
$state=0
$hresult=$c::SHQueryUserNotificationState([ref]$state)
if (-not $hresult -and ($state -in 2..4)) {
do {
$null=$c::GetWindowThreadProcessId($c::GetForegroundWindow(), [ref]$procid)
$fname=(gps -Id $procid -FVI -EA SilentlyContinue).FileName
} until ($fname)
return ((gi $fname).BaseName)
}
return "unknown"
}
Wait-ForFullScreenProc
$watcher=New-Object System.IO.FileSystemWatcher
$watcher.Path=Split-Path -parent $MyInvocation.MyCommand.Definition
$watcher.IncludeSubdirectories=$false
$watcher.EnableRaisingEvents=$true
$null=Register-ObjectEvent $watcher "Created" -Action {
if ($Event.SourceEventArgs.Name.StartsWith("Replay_")) {
ren -Path $Event.SourceEventArgs.FullPath -NewName ($Event.SourceEventArgs.Name -replace "^Replay", (global:Get-FullScreenProcName))
}
}
while ($true) {sleep 1}
Steffen