Как объединить переменную со строкой или переменной в командном файле - PullRequest
9 голосов
/ 19 февраля 2012

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

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

Т.е. у вас есть файл 0_1_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 )

1 Ответ

9 голосов
/ 19 февраля 2012

Конкатенация работает!Но ваше эхо не проходит.

Поскольку вы находитесь в командном блоке (скобки), все процентные переменные раскрываются до того, как блок будет выполнен, поэтому вывод 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
  )
)
...