Как объединить переменную со строкой или переменной в пакетном файле

Я хотел бы объединить переменную со строкой.

В строке с 7 по 11 я пытаюсь объединить !somevariable! со строкой или с переменной %%P.
Но, похоже, это не работает.

т.е. у вас есть файл 0"GEN 0" where 0 is the !sPDFName!en.pdf в текущей папке.
Скрипт сокращает имя файла до первой цифры.

После этого я хочу создать новую переменную со строкой, например:
"GEN 0" where 0 is the !sPDFName!

Полный код:

 1 SETLOCAL EnableDelayedExpansion
 2 for /f "delims=" %%P in ('dir /b *.pdf') do (
 3    SET "sPDFName=%%~nxP"
 4    echo "!sPDFName:~0,1!"
 5    IF "!sPDFName:~0,1!"=="1" (SET "sPDFName=!sPDFName:~0,1!")
 6    IF "!sPDFName:~0,1!"=="0" (SET "sPDFName=!sPDFName:~0,1!")
 7    SET tempStr=GEN !sPDFName! 
 8    SET myvar=!myvar! %%P
 9
10    echo "%myvar%"
11    echo "%tempStr%"
12    ::echo "!sPDFName!"
13    pause
14    for /f "delims=" %%H in ('dir /b *.html') do (
15    IF "!sPDFName:~-0!"=="!%%H:~0,1!" echo %%H
16    )
17 )

person John Boe    schedule 19.02.2012    source источник


Ответы (1)


Объединение работает! Но ваше эхо не работает.

Поскольку вы находитесь в командном блоке (круглые скобки), все процентные переменные расширяются до того, как блок будет выполнен, поэтому вывод echo "%myvar%" является содержимым myvar перед входом в цикл FOR.

Но вы уже знаете правильный путь, используя отложенное расширение (с !)

Итак, ваш код должен выглядеть так

SETLOCAL EnableDelayedExpansion
for /f "delims=" %%P in ('dir /b *.pdf') do (
  SET "sPDFName=%%~nxP"
  echo "!sPDFName:~0,1!"
  IF "!sPDFName:~0,1!"=="1" (SET "sPDFName=!sPDFName:~0,1!")
  IF "!sPDFName:~0,1!"=="0" (SET "sPDFName=!sPDFName:~0,1!")
  SET tempStr=GEN !sPDFName! 
  SET myvar=!myvar! %%P

  echo "!myvar!"
  echo "!tempStr!"
  ::echo "!sPDFName!"
  pause
  for /f "delims=" %%H in ('dir /b *.html') do (
    IF "!sPDFName:~-0!"=="!%%H:~0,1!" echo %%H
  )
)
person jeb    schedule 19.02.2012