Преместване на файлове въз основа на частично име - DOS/Batch

Имам този код

pushd "C:\Folders\"
for %%j in (*) do (
md "%%~nj"
move "%%j" "%%~nj"
)
popd
pause
exit

Това премества файлове със същото име в папка със същото име, ако папката не съществува, ще създаде нова папка. ОК страхотно.

Този проблем, който имам, е, че искам същата функция като по-горе, но трябваше да погледна само първите 4 знака. напр.

1234 - sample.jpg
1234 - sample-sm.jpg
1234 - sample-new.jpg
1234 - sample-right.jpg

1235 - sample.jpg

1234 файла ще бъдат преместени в същата папка, тъй като първите 4 знака са еднакви, но 1235 ще бъдат преместени в нова папка, тъй като юмрукът за символи е различен.

Благодаря ти


@echo off 
setlocal enabledelayedexpansion
pushd "C:\Folders\"
for %%a in (*) do (
  set fldr=%%~na
  set fldr=!fldr:~0,4!
  md "!fldr!"
  move "%%a" "!fldr!"
)
popd
pause
exit

Той обаче създава нови папки с първите 4 букви и премества файловете в тези създадени папки... Той премества всичко със същите първи 4 букви в правилната папка.

Така че не, трябва ми НЕ, за да направя директория, а да я преместя във вече създадената директория.


person Arthor    schedule 24.12.2011    source източник
comment
възможен дубликат на преместване на файлове в папки с частични имена   -  person Andriy M    schedule 24.12.2011
comment
може да съм пропуснал нещо, но не ми се струва, че въпросът е един и същ. OP иска начин да създаде папка с име, което съкращава името на файла; докато предишният SO въпрос беше за намиране на съществуваща папка със съвпадение на име.   -  person PA.    schedule 27.12.2011
comment
Мисля, че си прав, но не мисля, че имаш и двете функции. Ако папката съществува (което ще стане), имам нужда всички файлове с ЕДНАКВИ първи 4 знака да бъдат преместени в тази папка. напр.   -  person Arthor    schedule 31.12.2011
comment
Освен това видях кода на Andriy M, но имената на файловете трябва да са еднакви... Само първата част от моя е същата. Тествах кода. Просто ми трябва, за да разгледам първите 4 знака и да ги преместя в предварително създадена папка със същите първи 4 знака.   -  person Arthor    schedule 31.12.2011


Отговори (1)


Прочетете HELP SET и след това опитайте следния код като отправна точка за изграждане на вашето решение...

ще трябва да се справите с дублирани имена, които могат да възникнат.

@echo off 
setlocal enabledelayedexpansion
for %%a in (*) do (
  set fldr=%%~na
  set fldr=!fldr:~0,4!
  echo md "!fldr!"
  echo move "%%a" "!fldr!"
)

опитайте, тествайте обстойно и премахнете командите ECHO.

person PA.    schedule 26.12.2011
comment
Благодаря ти PA. просто имам нужда от още малко помощ, тествах :) - person Arthor; 31.12.2011