2012-01-03 3 views
0

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

  • смотрит на последних 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 

(очевидно YYYYMMDD будет заменен на дату файла)

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

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

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

+0

Является ли 'BS_IDX_LEVEL_' частью имени исправлено? –

ответ

0

Пока вы циклически и получать последние 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 
Смежные вопросы