Пакетное копирование / перемещение файлов в папки с одинаковыми именами

У меня есть куча файлов.xlsx, которые создаются каждый месяц. Я хотел бы иметь возможность пакетного перемещения файлов в папки, которые в основном имеют одно и то же имя.

Пример: 123456 Action.xlsx, 123456 RC.xlsx, 123456 PF.xlsx. Папка будет 123456 Случайный центр.

Есть ли способ переместить эти файлы в эту папку, используя пакетную команду или что-то еще через командную строку?

Вот код, который я пытался использовать / изменить.

@echo off
pushd "C:\New folder"
rem Process all files in this folder separating the names at " "
for /F "tokens=1* delims=-" %%a in ('dir /B .xlsx') do (
   rem At this point %%a have the name before the " " and %%b the rest after " "
   rem Create the folder, if not exists
   if not exist "%%a" md "%%a"
   rem Move the file there
   move "%%a-%%b" "%%a"
)
popd

Это создает папку с именем %%a, но ничего не помещает в нее. Я застрял и мне нужна помощь.

1 ответ

Решение

Прежде всего, добро пожаловать в Stack Overflow

В предоставленном вами коде вы пытаетесь перебрать файлы, используя вывод dirи немедленно разделить это, используя пробелы. Вместо этого, вы должны использовать цикл for для циклического перебора всех файлов, заканчивающихся сначала *.xlsx, а затем разбивать их до и после пробела.

Попробуй это:

@echo off
pushd "C:\New folder"
FOR %%G IN (*.xlsx) DO (
  FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
    if not exist "%%a Random Center" md "%%a Random Center"
    move "%%G" "%%a Random Center"
  )
)
popd
pause

В этом коде я сначала перебираю все файлы, оканчивающиеся на xlsx, перебирая xlsx ( подстановочный знак) без / переключатель. После этого я перебираю %%G (имена файлов) в виде строки, используя /F переключатель.

Обратите внимание, что вы пытаетесь использовать - в качестве разделителя, а не , Вы делаете ту же ошибку в вашей команде перемещения. Если файлы используют - вместо , вы должны также изменить разделитель в моем коде.

РЕДАКТИРОВАТЬ:

Это выглядит, если есть папка, которая начинается с того же слова, что и файлы, и перемещает их туда:

@echo off
setlocal EnableDelayedExpansion
pushd "C:\New folder"
FOR %%G IN (*.xlsx) DO (
  FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
    set "outFolder=%%a Random Center"
    for /D %%i in (*.*) do (
      for /F "tokens=1 delims= " %%b IN ("%%i") do (
        if "%%a"=="%%b" set "outFolder=%%i"
      )
    )
    if not exist "!outfolder!" md "!outfolder!"
    move "%%G" "!outfolder!"
  )
)
popd
pause
Другие вопросы по тегам