2015-06-12 2 views
0

Я пытаюсь указать файлы в определенной папке. Моя цель - вывести алфавитную позицию и имя файла. Таким образом, для папки с, например двух файлов в нем (hello.txt и world.txt) Я хочу, чтобы скрипт для вывода чего-то вроде этого:Объединение имен файлов с номерами файлов с использованием пакетного скрипта

File 1 is hello 
File 2 is world 

Это мой сценарий:

@echo off 
cls 

setlocal enabledelayedexpansion 
set folder=c:\test 
set count=0 

for /r "%folder%" %%a in (*.*) do (
    set file_!count!=%%~na 
    set /a count+=1 
    call :SUB 
    ) 

if !count!==0 goto :EOF 

goto :EOF 

:SUB 
echo File !count! is file_%count% 

Вот результат:

File 1 is file_1 
File 2 is file_2 

Как вы можете видеть вывод имен файлов не соответствует моим ожиданиям ,

я экспериментировал с различными вариантами переменной файла:

Вариант 2:

%file_!count!% 

Выход 2:

File 1 is world 
File 2 is world 

Вариант 3:

%file_count% 

Выход 3 :

File 1 is 
File 2 is 

Вы заметили мою ошибку?

+0

': SUB' -' echo File! Count! is! file_% count%! ' – Aacini

ответ

0

The: код SUB должен быть такой:

:SUB 
echo File !count! is !file_%count%! 

Это другой способ сделать то же самое:

@echo off 
cls 

setlocal enabledelayedexpansion 
set folder=c:\test 

for /F "tokens=1* delims=:" %%a in ('dir /B /A-D /S "%folder%" ^| findstr /N "^"') do (
    set file_%%a=%%~nb 
    echo File %%a is %%b 
) 
+0

Спасибо за ваши усилия. Ваш вариант: SUB-код тоже не работает. С вашим кодом я получаю следующий вывод: 'File 1 is'' File 2 is' У вас есть другая идея? Второй способ работает. Для получения точного результата я хочу изменить две последние строки: 'set file _ %% a = %% b'' echo Файл %% a is %% ~ nb' – Monty

+0

А! Это связано с тем, что вы назначаете имя файла _first_, а затем _modify_ переменную 'count'! Вы должны обмениваться этими строками: 'set file_! Count! = %% ~ na' и' set/a count + = 1', поэтому значение 'count' будет одинаковым в назначении и в подпрограмме !!! – Aacini

+0

А, это трюк! Большое спасибо! – Monty

0

передать имя переменной в качестве параметра вызываемой рутинного

... 
call :SUB !count! file_!count! 
.... 


:SUB 
echo echo File %1 is !%2! 
+0

Спасибо за вашу помощь, но и с этим вариантом я не достиг желаемого результата. Выход, который я получаю с вашим кодом: 'File 1 is'' File 2 is' – Monty

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