我一直在使用这个网站,并发现它在寻找脚本问题的解决方案方面非常有价值。今天我决定提出一个问题,因为我在这里度过了3天后,在超级用户和谷歌搜索中找不到我的解决方案。关于我的所有事情,现在我的意思......
我有几个程序安装,每个版本或风格略有不同。每个安装都有一个文本文件,用于定义其使用的变量。其中一个变量定义了用户特定设置的文件夹USERSET=%APPDATA%\foo1\foo2
。加班这些用户设置可能会损坏。我希望能够使用批处理文件或脚本删除这些文件夹。简而言之,我想在目录中搜索包含特定字符串的文本文件,该字符串设置指向文件夹的变量,获取该变量的值并使用它来删除目录。
这是我到目前为止所做的:
for /f "tokens=2 delims==" %%G in ('dir /b /s c:\foo\*.txt ^| findstr /i /f:/ userset') do rd /s /q %%G
输出如下:
H:\>rd /s /q %appdata%\foo1\foo2\USERSET
The system cannot find the file specified.
显然%appdata%
不会扩展?
当然,如果我只是在命令提示符下键入rd /s /q %appdata%\foo1\foo2\USERSET
,它就会起作用。
我对其他语言开放,我大多熟悉Windows命令行。
答案 0 :(得分:1)
这是因为环境变量扩展是在语句的分析时完成的。当您的for
循环正在运行且%%G
实际上获得了值时,为时已晚;变量已经扩展。
你可以用子程序解决这个问题,我想:
pushd C:\foo
for /f ... %%G in (...) do call :process "%%G"
popd
goto :eof
:process
call set "X=%~1"
rd /s /q "%X%"
goto :eof
答案 1 :(得分:0)
我只需在CALL
RD
....CALL RD ...
虽然我也试过
....CALL ECHO(RD ...
首先要验证 - 为了安全起见。