пакетный файл для имени папки на основе имени файла - PullRequest
0 голосов
/ 03 января 2012

Мне удалось скопировать и манипулировать пакетным сценарием, который выполняет следующее:

  • просматривает последние 4 символа файла .csv
  • создает папку с этим именем
  • перемещает файл в папку

    @echo off & setlocal EnableDelayedExpansion
    echo.
    pushd "%~dp0"
    for %%j in (*.csv) do (
        set file=%%~nj
        set folder=!file:~-4!
        if !folder!==FI_2 set folder=!file:~-6!
        if not exist !folder! md !folder!
        move "%%~j" "!folder!"
    echo "%%~j" -^> "!folder!"
    )
    popd
    echo.& echo.Done
    
    :: End_Of_Batch
    

У меня проблема в том, что мне нужно сгруппировать файлы по месяцам.Имена файлов выглядят так:

BS_IDX_LEVEL_YYYYMMDD_BAFI.csv

(очевидно, ГГГММДД будет заменен датой файла)

Таким образом, любой файл с именем BS_IDX_LEVEL_20111231_BAFI.csv попадет в папкус именем "1112" (формат даты папки - YYMM). Файл с именем BS_IDX_LEVEL_20111115_BAFI.csv будет помещаться в папку с именами "1111"

. Можно ли как-нибудь изменить этот сценарий, чтобы перед организацией файлових имена файлов сначала группирует их по дате?

Если я могу что-то объяснить, пожалуйста, дайте мне знать

1 Ответ

0 голосов
/ 20 мая 2012

Пока вы просматриваете последние 4 символа имени файла, вы также можете просмотреть даты. Я не знал, будет ли начало файла фиксированным или будет изменено, но я счел разумным предположить, что синтаксис date_end будет последовательным.

set filedate=!file:~-9,-7!

Это извлечет символы между 9-м и 7-м от конца строки, хранящейся в !file!. С синтаксисом у вас будет двухзначный номер месяца. Это также позволит избежать путаницы с датами из 2 или 4 цифр.

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

@echo off & setlocal EnableDelayedExpansion
echo.
pushd "%~dp0"
for %%j in (*.csv) do (
    set file=%%~nj
    set folder=!file:~-4!
    if !folder!==FI_2 set folder=!file:~-6!
    set filedate=!file:~-9,-7!
    SET datefolder=!folder!\!filedate!
    if not exist !folder! md !folder!
    if not exist !folder!\!filedate! md !folder!\!filedate!
    move "%%~j" "!datefolder!"
echo "%%~j" -^> "!datefolder!"
)
popd
echo.& echo.Done

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