Abstand bei Pfad-Variable in batch-Skript?

Was muss ich tun bei dSource ?

Bringt nix:

  1. set dSource=„G:\Meine Ablage\git-backup“

oder

  1. set dSource=G:\Meine Ablage\git-backup
    for /f „delims=“ %%f in (‚dir /a-d-h-s /b /s „%dSource%“‘) do (

@echo on
setlocal ENABLEDELAYEDEXPANSION
set day=86400
set /a year=day365
set /a strip=day
7
set dSource=G:\Meine Ablage\git-backup

call :epoch %date%
set /a slice=epoch-strip

for /f „delims=“ %%f in (‚dir /a-d-h-s /b /s %dSource%‘) do (
call :epoch %%~tf
rem if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)
if !epoch! LEQ %slice% del /f %%f
)
exit /b 0

rem Args[1]: Year-Month-Day
:epoch
setlocal ENABLEDELAYEDEXPANSION
for /f „tokens=1,2,3 delims=-“ %%d in (‚echo %1‘) do set Years=%%d& set Months=%%e& set Days=%%f
if „!Months:~0,1!“==„0“ set Months=!Months:~1,1!
if „!Days:~0,1!“==„0“ set Days=!Days:~1,1!
set /a Days=Daysday
set /a _months=0
set i=1&& for %%m in (31 28 31 30 31 30 31 31 30 31 30 31) do if !i! LSS !Months! (set /a _months=!_months! + %%m
day&& set /a i+=1)
set /a Months=!_months!
set /a Years=(Years-1970)*year
set /a Epoch=Years+Months+Days
endlocal& set Epoch=%Epoch%
exit /b 0

Macht die Hochkommas kaputt: 2. for /f „delims=“ %%f in (‚dir /a-d-h-s /b /s „%dSource%“‘) do (

Wieder nix:

G:

cd \

cd „Meine Ablage“

cd git-backup

call :epoch %date%

set /a slice=epoch-strip

for /f „delims=“ %%f in (‚dir /a-d-h-s /b /s .‘) do (

call :epoch %%~tf

rem if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)

if !epoch! LEQ %slice% del /f %%f

)

exit /b 0

Dito:

G:

cd \

cd „Meine Ablage“

cd git-backup

call :epoch %date%

set /a slice=epoch-strip

for /f „delims=“ %%f in (‚dir /a-d-h-s /b /s @path‘) do (

call :epoch %%~tf

rem if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)

if !epoch! LEQ %slice% del /f %%f

)

exit /b 0

Klappt auch nicht, jedenfalls sind nach dem Ausführen noch immer 8 Dateien drin:

C:

cd \

cd Tools

cd git-backup

@echo off

setlocal

set sourceDir=C:_GIT

set zipFile=git-backup-%date:~-4%%date:~3,2%%date:~0,2%__%time:~0,2%%time:~3,2%%time:~6,2%.zip

echo Add-Type -A System.IO.Compression.FileSystem >> %~dp0TempZipScript.ps1

echo [IO.Compression.ZipFile]::CreateFromDirectory(’%sourceDir%’,’%~dp0%zipFile%’) >> %~dp0TempZipScript.ps1

PowerShell.exe -ExecutionPolicy Bypass -Command „& ‚%~dp0TempZipScript.ps1‘“

del %~dp0TempZipScript.ps1

move *.zip „G:\Meine Ablage\git-backup“

cd „G:\Meine Ablage\git-backup“

rem J.M., 2019-12-24 {

for /f „usebackq delims=“ %%G in (

forfiles /c "cmd /c if /i @isdir == true echo @path" /d 7 2^>nul

) do echo del „%%~G“

rem } J.M., 2019-12-24

rem C:\Tools\git-backup\clean.bat

setlocal

endlocal & exit /b

Ohje, das ist ziemlich unlesbar. Allgemein: Codeblöcke kann man entweder mit 4 Leerzeichen einrücken…

Das hier kommt raus
wenn am Anfang jeder Zeile 4 Leerzeichen stehen

Oder mit drei backticks, ```, also

``` 
Das hier ist ein Beispiel
```

Innerhalb einer Zeile geht das mit einfachen Backticks. Also

Das ist `ein Test` 

wird

Das ist ein Test.


Zur eigentlichen Frage: Die ganzen Snippets habe ich jetzt (u.a. aus Gründen der schweren Lesbarkeit) nicht nachvollzogen. Ganz allgemein kann man Pfade in Windows auch durch die DOS-Variante ersetzen - insbesondere, wenn Leerzeichen enthalten sind. Der Pfad

G:\Meine Ablage\git-backup

sollte als

G:\MEINEA~1\GIT-BA~1

verfügbar sein. (Den Namen kann man sich anzeigen lassen, indem man an der Konsole dir /X eintippt. Nur für den Fall, dass es mehrere Ordner mit dem gleichen Anfang gibt. Z.B. könnte ein Ordner G:\Meine Abstellkammer dann G:\MEINEA~2 heißen…)

Hilft das schon?


Ein paar Abstraktionsebenen höher: Du scheinst da ein BAT schreiben zu wollen, das Backups als ZIP erstellt, mit PowerShell-Magic. Du weißt aber schon, dass jar.exe auch verwendet werden kann, um ZIPs zu erstellen? (Eine .JAR-Datei ist eine .ZIP-Datei)

Ich hab’ hier ein paar BATs für solche Sachen. Die unterste heißt zipSingle.bat, und enthält die Zeile

jar -cMf "%~1.zip" %1

Wenn man die aufruft

G:\Meine Ablage\>zipSingle git-backup

dann packt sie den Ordner git-backup in eine gleichnamige ZIP.

Aber das nur nebenbei.

1 „Gefällt mir“

Oh, das mit der Einrückung vergesse ich immer wieder…

Vielen vielen Dank, werde mal schauen!