2

У меня есть около 100 000 файлов с такими именами, как:

  • completedCourses_2017-10-08 11 18-05-02.txt
    или же

  • emptyCoursesResults_2017-10-08 11 13-21-59.txt

Все эти файлы находятся в одном каталоге, и я хочу "разбить" его по дате на каталоги, например, все файлы с датой 2017-10-08 идущие в каталог с именем 2017-10-08 , файлы с датой 2018-01-02 вход в каталог с именем 2018-01-02 - независимо от того, что находится в начале имени и в конце.

Возможно ли использовать решение Windows?

1 ответ1

3

Вы можете использовать цикл FOR /F и установить "USEBACKQ TOKENS=2 DELIMS=_ " таким образом, чтобы проанализировать и получить строку даты из имени файла для повторного использования в последующих командах соответственно для необходимых операций.

Затем вы будете использовать смесь команд, таких как DIR , MD , XCOPY и DEL чтобы выполнить файловые операции, чтобы переместить их в новую папку с датой.

Примечание. Обязательно укажите значение переменной Src= для папки, в которой находятся эти файлы, и обязательно укажите значение переменной Dest= для папки, в которую будут перемещены файлы, а папка yyyy-mm-dd будет созданный для этих файлов, чтобы проживать после перемещения.

@ECHO ON

SET "Src=C:\Folder\Source"
SET "Dest=C:\Folder\Destination"

FOR /F "USEBACKQ TOKENS=2 DELIMS=_ " %%A IN (`DIR /B "%Src%\*.txt"`) DO (
    IF NOT EXIST "%%~A" MD "%%~A"
    XCOPY /F /Y "%Src%\*%%~A*.txt" "%Dest%\%%~A\" && DEL /Q /F "%Src%\*%%~A*.txt"
    )

EXIT

Дополнительные ресурсы

  • FOR /F
  • FOR /?

        delims=xxx      - specifies a delimiter set.  This replaces the
                          default delimiter set of space and tab.
        tokens=x,y,m-n  - specifies which tokens from each line are to
                          be passed to the for body for each iteration.
                          This will cause additional variable names to
                          be allocated.  The m-n form is a range,
                          specifying the mth through the nth tokens.  If
                          the last character in the tokens= string is an
                          asterisk, then an additional variable is
                          allocated and receives the remaining text on
                          the line after the last token parsed.
        usebackq        - specifies that the new semantics are in force,
                          where a back quoted string is executed as a
                          command and a single quoted string is a
                          literal string command and allows the use of
                          double quotes to quote file names in
                          file-set.
    
  • XCOPY

  • DEL
  • DIR

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .