2016-05-08 9 views
0

ich diese Dateien verschieben möchten (Erweiterung ist irrilevant)wenn überhaupt ein Wort identisch Namen

cane pazzo.txt 
cane.torrent 
incredibile cane s03.xx 

in Ordner

cane 

Ich habe diesen Code

@echo off 
setlocal enabledelayedexpansion 
pushd %1 
for /F "USEBACKQ tokens=*" %%a in (`dir /b /a:-d`) do (
    set "_file=%%a" 
    for /D %%b in (*) do (
     if NOT "x!_file:%%b=!" == "x!_file!" (
      move %%a %%b 
     ) 
    ) 
) 
popd 

, aber ich kann nur Dateien verschieben, die den gleichen Namen wie der Ordner

haben

Statt diese Dateien

cane pazzo.txt 
incredibile cane s03.xx 

nicht innerhalb bewegt, weil mehr von einem Wort innerhalb Dateinamen haben. Warum??

Jede Lösung mit .bat-Skript?

+0

In PowerShell wäre es 'foreach ($ dir in gci -Distrectory) {gci | wo Name -match $ dir.Name | mv -Destination $ dir} ' – TessellatingHeckler

+0

Also existiert der Ordner' cane' bereits, und sein Name ist das Wort, nach dem in den Dateinamen gesucht werden soll? – aschipfl

+0

@aschipfl Ja, es ist richtig..aber ich weiß nicht, wie ich Powershell verwenden muss. Ich kopiere Befehl, aber es sagt mir ungültig .. –

Antwort

2

Ihre Logik ist korrekt. Der einzige Punkt ist, dass move Befehl, um die Datei in Anführungszeichen setzen sollte, so Namen, die Leerzeichen enthalten korrekt verarbeitet werden:

move "%%a" "%%b" 

Ich würde auch die „x“ im Vergleich zu beseitigen, weil es nicht notwendig ist:

if NOT "!_file:%%b=!" == "!_file!" (
+0

ja, jetzt ist es gelöst, nur Zitate..danke –