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 に答える