Пакетное копирование / перемещение файлов в папки с одинаковыми именами
У меня есть куча файлов.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