2017-02-14 8 views
0

У меня есть файл (ы) в папку с названиями вроде «223.DAT_2017010211315» Я хочу, чтобы перебрать все файлы и переименовывать их любят 223_2017010211315.DAT»своп знаки имени файла, используя пакетный файл

ближайший я получил это требование следующим образом. Я мог бы просто получить первый маркер имени файла.

set "res=223.DAT_2017010211315" 
for /f "tokens=1 delims=." %%i in ("%res%") do (set prefix=%%i) 
echo %prefix% 
pause 

может кто-то помочь мне через это?

+0

Спасибо каждый за быстрый ответ .. я в состоянии удовлетворить требования. –

+0

добро пожаловать. Пожалуйста, [принимайте ответ] (http://stackoverflow.com/help/someone-answers), который вам больше всего нравится/помогает. – Stephan

ответ

1
@echo off 
REM for every file matching the filter do: 
for %%f in (*.dat_*) do (
    REM disassemble into tree tokens, using . and _ as delimiters: 
    for /f "tokens=1,2,3 delims=._" %%a in ("%%~f") do (
    REM re-assemble in different order: 
    echo %%a_%%c.%%b 
) 
) 
2

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

for %%f in ("*.dat_*") do echo %%f 

Теперь, когда мы можем найти файлы для обработки, мы должны отделить имя и расширение файлов. Это простая задача, так как сменные параметры for (%%f в предыдущем коде) позволяют использовать некоторые модификаторы для получения конкретной информации файла, на который имеется ссылка (полный список см. В разделе for /?). Мы будем использовать %%~nf (имя файла, на который ссылается %%f) и %%~xf (расширение файла на который ссылается на %%f)

for %%f in ("*.dat_*") do echo %%~nf %%~xf 

После того, как у нас есть два элемента, мы должны разделить расширение с помощью подчеркивания как разделитель. Это даст нам два жетона, левую и правую стороны подчеркивания. Для этого for /f используется для обработки расширения файла.

for /f "tokens=1,2 delims=_" %%a in ("%%~xf") do echo %%a %%b 

Как мы запрашиваем два маркеров, то for /f будет использовать запрашиваемый заменяемый параметр %%a для хранения первого, и создаст дополнительный заменяемый параметр %%b (следующий символ), чтобы сохранить второй маркер.

%%~nf %%~xf 
    [.][................] 
    223.DAT_2017010211315 = %%f 
    ^..^ ^...........^ 
    %%a %%b 

Таким образом, для каждого файла в списке, выполните for /f, чтобы получить необходимую информацию для выполнения команды ren.

for %%f in ("*.dat_*") do for /f "tokens=1,2 delims=_" %%a in ("%%~xf") do (
    echo ren "%%f" "%%~nf_%%b%%a" 
) 

Обратите внимание, что для отладки purpouses, команда ren не выполняется, только вторит утешать, чтобы проверить поведение кода. Если выход правильный, удалите echo и запустите код еще раз.

+0

Благодарим вас за подробное объяснение! –

0

Просто, чтобы показать альтернативный способ:

@echo off&setlocal enabledelayedexpansion 
pushd "X:\path\to\folder" 
for %%A in (*.dat_*) do (
    set fname=%%A 
    Echo ren "%%A" "!fname:.DAT=!.DAT" 
) 
Popd 

Если выход выглядит нормально, удалите эхо