2015-01-20 4 views
0

Я пытаюсь преобразовать рекурсивно через все файлы внутри папки. Мне нужно прочитать имя файла, abcd_somethingone_pqrs.csv - это шаблон имени файла. Мне нужно создать папку (если папка не существует) с именем somethingone и переместить файл в эту папку. Я начал писать следующий код в .bat.Ошибка передачи пакетного файла Windows (.bat)

FOR /R D:\MOE\MRs\batchfiles\01\ %%F in (*.*) do ( 
echo %%~nF 
set newloc=%%~nF 
echo %newloc% 
) 

Строка1 правильно печатает имена файлов в папке. Но когда я прочитал его для новой переменной newloc, всегда строка 4 печатает только имя последнего файла. Может ли кто-нибудь понять, что здесь происходит, или предложить мне способ сделать это.

+1

Вы хотите, чтобы все файлы 'somethingone' оказались в одной папке или должна быть одна папка на уровне каталога? – SomethingDark

+0

Мне нужно создать отдельную папку для каждого другого «somethingone». например, могут быть такие файлы, как abcd_somethingone_pqrs.csv, abab_somethingone_pqpq.csv, abcb_somethingtwo_pqrr.csv. Поэтому мне нужно классифицировать все что-то в папке с именем somethingone. Все somethingtwo имя, содержащее файлы в папку с именем somethingtwo ... – nadh

+0

Либо я неправильно читаю, либо ваши первые два предложения противоречат друг другу. Я понимаю, что там должны быть разные 'something ___' папки, но есть ли только одна папка 'somethingone' для каждого отдельного csv, который встречается? – SomethingDark

ответ

0

EDIT: Полностью изменил мой ответ и на самом деле попытался полностью решить вашу общую проблему, а не только то, что вы застряли.

Вам необходимо обновить target_dir, куда бы вы ни захотели файлы.

@echo off 
setlocal enabledelayedexpansion 

set source_dir=D:\MOE\MRs\batchfiles\01\ 
set target_dir=D:\something\ 

:: Recursively search the source directory for files 
for %%A in (somethingone somethingtwo somethingthree) do (
    for /F "delims=" %%B in ('dir /a:-d /s /b %source_dir%*%%A*') do (
     REM if the directory does not exist, make it 
     if not exist %target_dir%%%A mkdir %target_dir%%%A 

     move %%B %target_dir%%%A 
    ) 
) 


Вам необходимо включить замедленное расширение, так что значение переменной внутри цикла for будет правильно размножать.

setlocal enabledelayedexpansion 
for /R D:\MOE\MRs\batchfiles\01\ %%F in (*.*) do (
    echo %%~nF 
    set newloc=%%~nF 
    echo !newloc! 
) 
+0

SomethingDark, спасибо за ответ ..., но теперь строка 4 печатает только! Newloc! для меня .. Не поймите, что происходит не так. – nadh

+0

Если вы можете помочь, мне также нужно знать, как разделить строку имени файла с разделителем «_» (подчеркивание), как я упомянул в вышеупомянутом вопросе .. Спасибо ... – nadh

+0

@nadh - В верхней части моего голову, я бы пошел с http://ss64.com/nt/for_f.html и установил '' delims = _ "'. – SomethingDark

Смежные вопросы