我遇到了以下示例的麻煩。我有一個包含文件名列表的文件。我想檢查這些文件是否存在,例如:在windows shell中運行時擴展env變量
%ProgramFiles%\Internet Explorer\iexplore.exe
%SystemRoot%\sdfsdfsd.exe
%SystemRoot%\explorer.exe
每條路徑都包含環境變量。
我bat
文件的例子:
echo off
for /f "tokens=*" %%a in (filelist.txt) do (
if exist "%%~a" (
echo %%~a exists
) else (
echo %%~a doesn't exists
)
)
文件名正確加載,但我CMD無法找到的所有文件。我認爲cmd處理器不會擴展路徑中的env變量......我該怎麼做呢?或者可能還有另一個問題。
或者我怎麼能用%
代替!
變量和其他?
確實如此,但在腳本退出後,'call set varname'爲'%fname%'的ocd刺痛仍然被定義爲孤立的環境變量。在我看來,調用SET'會破壞'setlocal'。 – rojo 2013-02-27 23:16:57
另外,延遲擴展會破壞包含'!'的任何文件名(這很少見,但我知道,但確實發生了)。這個問題可以通過在循環中打開和關閉延遲擴展來解決。 – dbenham 2013-02-28 02:00:04
@rojo'call set'不會在'setlocal'內部使用時定義'%fname%'。 – 2013-02-28 07:51:24