Batch erkennt keine .ink?
Ich habe ein Programm entwickelt welches automatisches alles in einen bestimmten ordner auf dem Desktop verschiebt name der datei AD.bat Allerdings verschiebt sie alles in den richtigen unterordner bis auf .ink dateien ich sage batch soll die .ink zu einem bestimmten ordner kopieren allerdings erkennt batch die .ink dateien nicht mit der dateiendung
Befehl für .ink datei:
for /f "delims=;" %%i in ('dir/s/b "C:\Users\%username%\Desktop*.ink"') do move "%%i" C:\ProgramData\AD\Programme
sry bei habe es falsch hierein gepostet lautet
for /f "delims=;" %%i in ('dir/s/b "C:\Users\%username%\Desktop\*.ink"') do move "%%i" C:\ProgramData\AD\Programme
2 Antworten
Bei mir funktioniert es ohne Probleme.
Ich hätte jedoch einige Anmerkungen:
- delims=; definiert "; " als Trennzeichen. sollte ein Dateiname ein Semikolon enthalten (zulässig aber unschön) wird dieser in Teile zerlegt, sofern tokens dieses Verhalten nicht durch einen * überschreibt:
for /f "tokens=1-3* delims=;" %%a in ("test was;bub;mik;ratz;fatz.txt") do echo token: 1=%%a 2=%%b 3=%%c rest=%%d
pause
- möglichst Variablen für die Bezeichnung von Systemdefinierten Ordnern verwenden (Diese Ordner könnten je nach Sytstemversion oder gusto des Admins andere Namen haben)
- vor Copy oder Move sicherstellen, das der Zielordner existiert (md "Zielordnerpfad"). Macht nichts , wenn der Pfad bereits existiert. Eine Fehlermeldung kann mit 2>nul unterdrückt werden.
- ein auf rekursives dir /b /s folgendes Move/Copy kann kritisch werden , wenn in verschiedenen Unterordnern Dateien mit gleichem Namen existieren. Diese würden alle in den gleichen Ordner verschoben, was einer Überschreibschutzbehandlung bedürfte.
- auch wenn es möglich ist bei einigen Programmen die Leerzeichen zwischen Schaltern wegzulassen ist es eine üble Unart (einmal angewöhnt kann es bei Programmen, welche das nicht mögen zu üblen Fehlern führen, die sich nir schwer lokalisiern lassen) also nicht dir/s/b sondern ordentlich: dir /s /b .
@echo off
chcp 65001 >nul & rem Umlaute anzeigen
rem zur Bezeichnung von Systemrelevanten Objekten möglichst SystemUmgebungsvariablen benutzen
set "Zielpfad=%ProgramData%\AD\Programme"
rem wenn der Ordner noch nicht existiert diesen erzeugen.
md "%Zielpfad%" 2>nul
rem tokens=* bedeutet ganze Zeile so wie sie ist auswerten alle delimiter werden innoriert.
for /f "tokens=*" %%i in ('dir /s /b /a-d "%userprofile%\Desktop\*.ink"') do move "%%~i" "%Zielpfad%"
pause
kleine Frage am Rande, bauen wir noch immer Komponenten für Deine Allumfassende SystemzerlegungsBatch? oder warst Du klug genug um ein solch gefährliches Projekt endgültig zu den Akten zu legen?
ich habe keine Ahnung was Du da zauberst, auch shortcut-dateien werden problemlos gefunden....
for /f "tokens=*" %%i in ('dir /s /b /a-d "%userprofile%\Desktop\*.lnk"') do echo move "%%~i" "%Zielpfad%"
pause
alledings keine, welche als Shortcuts für alle User angelegt wurden. (diese sind unter %public%\desktop zu finden")
dir /b "%public%\desktop\*.lnk"
Vermutlich meinst Du .lnk und nicht .ink - .lnk ist die Abkürzung für Link, also Verbindung, und stellt eine so genannte Verknüpfung unter dem Betriebssystem Windows dar. ... Am häufigsten werden solche Verknüpfungen für exe Dateien verwendet.
So kann das nicht funktionieren.
also was solch ich jetzt verändern damit der befehl funktioniert ? :D
komische Frage mache aus *.ink ein *.lnk (in lautschrift: stern punkt eL en ka)
geht leider immer noch nicht
ich habe einmal for /f "delims=;" %%i in ('dir/s/b "C:\Users\%username%\Desktop\*.ink"') do move "%%i" C:\ProgramData\AD\Programme
und mache danach robocopy C:\Users\%username%\OneDrive\Desktop C:\ProgramData\AD\Sonstiges /XF C:\Users\%username%\OneDrive\Desktop\start.bat /XD AD C:\ProgramData\AD /X /S
und die verknüpfung->verknüpfung->Programm wird immer in Sonstiges einsortiert und nie in Programme also ich weis ja das eine chance besteht das robocopy es es in sonstiges kopiert aber davon mal abgesehen wird es trotzdem von dem oberen befehl nicht erkannt dateiendung laut windows Verknüpfung (.lnk)