Batch mit Stringverarbeitung in Win 11

OliverFuchs66

Newbie
Registriert
Sep. 2022
Beiträge
2
Hallo,
Ich arbeite in dem kleinen Verein meiner Mutter. Sie ist leider am Computer nicht so gut und löscht sich oft alle Daten. Daher wollte ich die Autosavefunktion von Word aktivieren. Aber ab Word 365 benötigt man OneDirve dazu was mir unsympatisch ist. Jetzt habe ich es aber geschafft, dass Word in einem von mir erstellten Verzeichnis WordAutosave jedes bearbeitet Dokument dass länger als 1 Minute nicht gesichert wurde im .asd Format speichert. Wird das Originalfile geschpeichert wird die .asd wieder gelöscht. In diesem Verzeichnis habe ich das Unterverzeichnis ARCHIV angelegt.
Ich würde jetzt gerene einen Bach schreiben, welcher alle 1 Minuten alle die im WordAutoSave Verzeichnis gerad offenend .asd Datein in das Verzeichnis ARCHIV Kopiert. Die Erweiterung im Namen 'AutoWiederherstellen-Speicherung von' die dem Dateinamen vorangestellt wird würde ich gerne löschen, dafür wurde ich gerene die Erweiterung ArchivDatum anhängen.
Ich bin so weit gekommen.

:begin
Batch Körper
timeout /t 60
:goto begin
Mit dieser Schleife würde das Batch dauernd laufen und alle 60 Sekunden exekutiert werden.

Dann habe ich die Zeile
for /f "delims=X" %%a in ('dir /B *.docx') do ......
Damit wird das Direktory durchgegangen, Eintrag für Eintrag.
Der Eintrag ist in der Variablen a gespeichert.
Nun gibt es die möglichkeiten einen Stirng zu bearbeiten.
Wäre ich in der Komandozweile so würde
set a=%a:~1,36$
Dein vorderen Text abscheiden.
Das habe ich in der CMD-Umgebung am Prompt versucht. Da geht das mit der Stringoperation. Was ich weiß ist, dass man in der Kommandozeile die Variable a mit %a% dereferenzieren muss.
Verwendet man diese aber im Bach so muss man %%a%% verwenden.
Warum beim Befehl if aber nur %%a in ('... funktioniert, und es funktioniert, ist mir nicht klar.
Ausserdem war es mir nicht möglich die Ausschneidefunktion für den String im Bacht zum laufen zu bringen.
Möglichwerweise mache ich da etwas falsch. Ich kenne mich mit Batch Programmierung nicht so aus.
Danke
lg Oliver
 
Ich würde das Problem an der Wurzel packen:
Deiner Mutter beibringen nicht immer alle Dateien zu löschen.

Falls es unbedingt ein Script sein soll, würde ich das per Powershell machen.
 
  • Gefällt mir
Reaktionen: ReignInBlo0d
Hallo,
(1) Danke für den gut gemeinten Ratschlag, aber meine Mutter ist 83 und ich versuche das seit 20 Jahren ohne Efolg. Sie sieht einen Computer nur an und der steht. Also ist dieser Weg nicht gangbar.
(2) Was ist eine Powershell. Nach meinem Wissen ist das ja nur eine CMD shell mit besonderen Rechten, oder irre ich da.
Danke
lg Oliver
 
OliverFuchs66 schrieb:
(2) Was ist eine Powershell. Nach meinem Wissen ist das ja nur eine CMD shell mit besonderen Rechten, oder irre ich da.
Was was du als Script da oben programmierst, ist die alte DOS-Shell, die (leider) immer noch mit Windows 10/11 weiterlebt.

Powershell ist eine vollständige Neuentwicklung die wesentlich mächtigere Instrumente hat, als die alte DOS-Shell. Die Powershell gibt es seit Windows 7.

Damit ist sowas möglich:
PowerShell:
[System.IO.Path]::GetFileNameWithoutExtension('D:\LogTest\Newline-FileTest.txt')
Und das gibt dir dann zurück:
PowerShell:
Newline-FileTest
 
Zurück
Oben