1

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

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

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

我的文件 (%1) 仅包含相对路径,如下所示:

VENDOR\ford1.car
VENDOR\bmw.car

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

请一些帮助和解释。谢谢

4

1 回答 1

0

尝试:

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

For 仅对 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.  
于 2013-05-15T16:26:00.943 回答