2015-05-10 3 views
2

У меня есть цикл, который перебирает файлы, получает фактическое имя файла (не включая весь путь) и пытается проверить, существует ли это имя файла в некотором списке. код у меня есть:batch: Подстрока в цикле с двумя переменными

setlocal enabledelayedexpansion enableextensions 
for /R %%j in (*.c) do (
set MYVAR=%%j 
set actualFileName=%%~nj 
if NOT "%MY_FILE_LIST%"=="!MY_FILE_LIST:%actualFileName%=!" set "TOCOMPILE=!TOCOMPILE! %MYVAR%" 

этот код не работает, так как actualFileName доступен с% вместо!. но! MYVAR: ~! ФактическийFileName !! тоже не работает. что я могу сделать?

+0

возможного дубликата [Как разделить имя файла из полного пути в пакете?] (Http://stackoverflow.com/questions/9252980/how-to-split-the-filename-from-a-full-path-in-batch) –

ответ

1

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

for /r %%j in (*.c) do (
    echo actualFileName is %%~nj 
) 

Где %%~nj это имя, которое, без расширения, из файла, который ссылается на %%j. См for /? для полного списка

редактировать адаптироваться к комментариям

setlocal enableextensions enabledelayedexpansion 

for /r %%j in (*.c) do (
    if not "!MY_FILE_LIST:%%~nj!"=="%MY_FILE_LIST%" (
     set "TOCOMPILE=!TOCOMPILE! "%%~fj"" 
    ) 
) 

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

setlocal enableextensions disabledelayedexpansion 
for /r %%j in (*.c) do (
    setlocal enabledelayedexpansion 
    if not "!MY_FILE_LIST:%%~nj!"=="%MY_FILE_LIST%" (
     for /f "delims=" %%a in ("!TOCOMPILE! ") do (
      endlocal 
      set "TOCOMPILE=%%a"%%~fj"" 
     ) 
    ) else endlocal 
) 
+0

спасибо за это !, но моя проблема сейчас на следующем шаге. Я отредактировал вопрос. – one

+0

@one, ответ обновлен. –

1
setlocal enabledelayedexpansion enableextensions 
for /R %%j in (*.c) do (
set MYVAR=%%j 
set lastIndex= some calculation to find last index of/


for /f "tokens=* delims=" %%# in ("!lastIndex!") do (
    set actualFileName=!MYVAR:~%%#! 
) 

) 

использовать другие вложенные ДЛЯ