Как перемещать / копировать папки с использованием групповых символов в пакетном режиме? - PullRequest
0 голосов
/ 05 июня 2019

У меня возникли проблемы с простой командой "move" в командном файле.

Чтобы дать некоторый потенциально полезный контекст, главная цель файла, который я пишу, состоит в сортировке именованных папок в алфавитно помеченные папки.

Например, папка с именем "Аллен, Джейк" будет отсортирована в папку с именем "A", а папка с именем "Brown, Sarah" будет отсортирована в папку с именем "B" и т. Д..

Вот строка кода, с которой у меня возникают проблемы:

    move "%SourceDirectory%\A*" "%DestinationDirectory%\A"

Когда я запускаю команду, я ожидаю, что папка с именем «Аллен, Джейк» будет перемещена из% SourceDirectory%.в "% DestinationDirectory \ A".

Вместо этого я вижу следующий вывод:

    C:\Users\alecm\Desktop>move "C:\Users\alecm\Desktop\Source\A*" 
    "C:\Users\alecm\Desktop\Destination\A"

    The filename, directory name, or volume label syntax is incorrect.

Я предполагаю, что я делаю простую синтаксическую ошибку здесь, но я не могу понять это.Заранее благодарим за то, что уделили время на это.

1 Ответ

0 голосов
/ 05 июня 2019

Команда move не принимает подстановочные знаки. Измените каталоги SOURCE_BASE и TARGET_BASE на свои.

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "SOURCE_BASE=C:\src\t"
SET "TARGET_BASE=C:\src\t\new"

FOR %%L IN (A) DO (
    FOR /F "delims=" %%F IN ('DIR /B /A:D "%SOURCE_BASE%\%%L*"') DO (
        SET "DNAME=%%~F"
        SET "FIRST_LETTER=!DNAME:~0,1!"
        SET "NEW_DIR=%TARGET_BASE%\!FIRST_LETTER!"

        IF NOT EXIST "!NEW_DIR!" (MKDIR "!NEW_DIR!")
        MOVE "%%~dpnxF" "!NEW_DIR!"
    )
)

Если это помещено в скрипт .bat, обязательно удвойте процент % символов для переменной F. %%F

Если вы хотите сделать больше, чем просто каталоги A*, измените первый цикл FOR на FOR %%d IN (A B C D) DO (.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...