[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何转换 for /f 提取文本中带环境变量的路径为实际对应路径

如图所示:Test.txt 文本中的第一列是带环境变量的路径(如:%UserProfile%\Desktop) 第二列是文件名(如:Test.exe)
那么:
  1. for /f "skip=1 tokens=1,2" %%a in (Test.txt) do if exist %%a\%%b del /q %%a\%%b
复制代码
此时的%%a是字符串形式的 %UserProfile%\Desktop 而不是对应的 C:\Users\[用户名]\Desktop,请问这种情况要如何转换为实际路径,使后面的删除文件命令可以执行成功?



1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 lonron 于 2023-5-8 10:09 编辑

回复 2# czjt1234


  
我知道cmd可以识别环境变量,但是for /f 的方式提取 Test.txt 文本中 路径 这段的时候,直接显示的结果就是 %UserProfile%\Desktop 而不会自动转成当前账户对应的 C:\Users\[用户名]\Desktop,所以导致我后面的判断失败不能删除 C:\Users\[用户名]\Desktop\测试.exe 文件。

TOP

回复 2# czjt1234


   

所以才想知道这种情况要怎么才能正确识别

TOP

回复 5# 77七


    用call这个妙啊,不过我没明白你不是说判断的话要开启延迟变量吗,但是第二段示例好像没开也可以得到正确结果。

TOP

回复 5# 77七
  1. @echo off
  2. for /f "skip=1 tokens=1,2" %%a in (Test.txt) do (
  3.         call if exist %%a\%%b (
  4.                 echo 存在
  5.         )
  6. )
  7. pause
复制代码
  1. @echo off
  2. for /f "skip=1 tokens=1,2" %%a in (Test.txt) do call if exist %%a\%%b (echo 存在)
  3. pause
复制代码
为什么换成下面这段就不正常了,显示if不是内部命令

TOP

回复 8# 77七


    好的,我吸收下,感谢帮助

TOP

回复 8# 77七


    刚有测试了下,判断的那段代码虽然可以转换环境变量,但好像结果并不是正确的,如果我把目标文件改成别的名称它依然会显示“存在”。

TOP

返回列表