So verwenden Sie nircmd.exe und legen den Dateinamen %~nF in einer Batch-For-Schleife fest

So verwenden Sie nircmd.exe und legen den Dateinamen %~nF in einer Batch-For-Schleife fest

Ich versuche, eine Batchdatei zu schreiben, die jeden Dateinamen durchläuft, einen Teil der Zeichenfolgen übernimmt und die Erstellungs- und Änderungsdaten festlegt. Beachten Sie, dass „dirpath“ ein Platzhalter für den tatsächlichen Pfad ist.

@echo off
setlocal enabledelayedexpansion
FOR /R dirpath %F in (*.*) DO (SET FNAME=%~nF SET MM=%FNAME:~0,2% SET DD=%FNAME:~2,2% SET YY=%FNAME:~4,2% nircmd.exe setfiletime %F "%DD% %MM%-20%YY% 00:00:00" "%DD%-%MM%-20%YY% 00:00:00")

Ich bin mir nicht sicher, wie ich überhaupt das Problem beheben kann, das das Skript macht – Pause pausiert das Programm nach der Schleife nicht. Wie kann dies umgeschrieben werden, damit es funktioniert?

Antwort1

Wie kann dies umgeschrieben werden, damit es funktioniert?

Sie haben eine Reihe von Problemen mit Ihrer Batchdatei:

  • Das ist es nicht . Sie müssen stattdessen %fverwenden . ist für eine Befehlszeile, die an mindestens 3 Stellen korrigiert werden muss.%%f%f
  • Ich würde die Befehle in do ( ... )separate Zeilen einfügen.
  • Sie können eine Pause vor dem Abschluss einfügen)
  • Sie können die erste Zeile auskommentieren, um remzu sehen, was die Batchdatei macht.
  • Fügen Sie echoder Nutzlastzeile mit hinzu nircmd.
  • Entfernen Sie es, echowenn Sie glauben, dass es funktioniert.
  • !Sie müssen an einigen Stellen anstelle von %innerhalb der forSchleife verwenden (dafür ist enabledelayedexpansiones gedacht - es ermöglicht die Erweiterung von Variablen zur Ausführungszeit und nicht zur Analysezeit

Beginnen Sie mit der folgenden Batchdatei (ich habe die wichtigsten Fehler für Sie behoben):

@echo off
setlocal enabledelayedexpansion
for /r dirpath %%F in (*.*) DO (
  set FNAME=%%~nF
  SET MM=!FNAME:~0,2!
  SET DD=!FNAME:~2,2!
  SET YY=!FNAME:~4,2!
  echo nircmd.exe setfiletime %%F "!DD!-!MM!-20!YY! 00:00:00" "!DD!-!MM!-20!YY! 00:00:00"
  pause
  )
endlocal

Weitere Informationen

  • Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
  • aktivierte verzögerte Erweiterung- Die verzögerte Erweiterung führt dazu, dass Variablen zur Ausführungszeit und nicht zur Analysezeit erweitert werden.
  • für /r- Durch Dateien blättern (Unterordner rekursiv durchsuchen).
  • Satz- CMD-Umgebungsvariablen anzeigen, festlegen oder entfernen. Mit SET vorgenommene Änderungen bleiben nur für die Dauer der aktuellen CMD-Sitzung bestehen.
  • lokal festlegen- Legen Sie Optionen fest, um die Sichtbarkeit von Umgebungsvariablen in einer Batchdatei zu steuern.

Antwort2

Ich habe eine andere Lösung gefunden, indem ich einfach eine Funktion aufgerufen habe.

FOR /R dirname %%F in (*.*) DO call :Setfiletime %%F
goto End
:Setfiletime
   SET FNAME=%~n1
   echo %FNAME%
   SET MM=%FNAME:~0,2%
   SET DD=%FNAME:~2,2%
   SET YY=%FNAME:~4,2%
   nircmd.exe setfiletime %1 "%DD%-%MM%-20%YY%" "%DD%-%MM%-20%YY%"
:goto :eof
:End

Vielen Dank an alle für Ihre Hilfe.

verwandte Informationen