环境变量问题

时间:2013-05-15 16:09:43

标签: batch-file environment

我只想回显一个用ENABLEDELAYEDEXPANSION定义的变量。它不起作用。 这是我关于这个问题的长篇文章的一小部分

  @echo off&setlocal enabledelayedexpansion
 for /f "tokens=*" %%x in (%1) do (
  set "D=%%x"
  echo %%~nD
 )

我也写了回音!~nD!但它也不起作用。

我的文件(%1)只包含相对路径:

VENDOR\ford1.car
VENDOR\bmw.car

我的目标是回显'ford1.car'或'bmw.car',因为我必须在我的脚本的后续步骤中使用它们,这只是文件的完整名称。

请一些帮助和解释。感谢

1 个答案:

答案 0 :(得分:0)

尝试:

@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (%1) do (
   echo %%~nxa
 )

仅用于替换for中使用的变量。您不能在其中设置变量并在其上使用替换。

%% ~na只会为您提供没有扩展名的文件名。您必须使用%% ~nxa来获取文件名和扩展名。

如果要将文件名设置为变量并对每个文件执行某些操作,则必须使用DelayedExpansion,如下所示:

@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (%1) do (
   set d=%%~nxa
   echo !d!
   Do something with !d!
 )

或者你可以创建一个子程序而不必使用任何变量

@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (%1) do (
   call :sub %%~nxa
 )
 goto :eof

:sub
%1 = your file name so do some processing on it.