Batch erkennt keine .ink?


24.05.2020, 17:50

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Frameworks 
Beitragsersteller
 24.05.2020, 19:18

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)

Erzesel  24.05.2020, 19:51
@Frameworks

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?

Erzesel  24.05.2020, 20:23
@Frameworks

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.

Woher ich das weiß:eigene Erfahrung

Frameworks 
Beitragsersteller
 24.05.2020, 18:28

also was solch ich jetzt verändern damit der befehl funktioniert ? :D

Erzesel  24.05.2020, 19:44
@Frameworks

komische Frage mache aus *.ink ein *.lnk (in lautschrift: stern punkt eL en ka)