【问题标题】:FOR /F not outputting correctly wen using move in the loop在循环中使用移动时 FOR /F 无法正确输出
【发布时间】:2015-09-29 22:03:44
【问题描述】:

我正在尝试清理一些文件共享,并且我有我要在 CSV 文件中移动的文件夹列表。

delfromtest.csv 中的值 是

Test1
Test2
test3

我正在尝试使用它。

FOR /F "tokens=1" %%A IN (C:\delfromtest.csv) DO (
if EXIST %Drive%:\%%~A (set asset=%%~A%) 
move "%drive%:\images%drive%\%asset%" "%drive%:\images%drive%\Do not Migrate%drive%\%asset%"
)

这个输出

move "v:\imagesv\C:\delfromtest.csv" "v:\imagesv\Do not Migratev\C:\delfromtest.csv"

但如果我从循环中删除整个移动命令,则变量会根据需要输出。

【问题讨论】:

  • 闻起来很像delayed expanison trap (asset)。还有一个% 太多了。应该是:(set asset=%%~A) - 除非您希望 % 成为值的一部分)

标签: batch-file for-loop cmd


【解决方案1】:

尝试不带引号的for 或使用usebackq。在for 内部设置变量时启用delayedexpansion

@echo off
setlocal enabledelayedexpansion
for /f %%a in (C:\delfromtest.csv) do ( set asset=%%~a
  if exist %Drive%:\!asset! (
    echo move "%drive%:\images%drive%\!asset!" "%drive%:\images%drive%\Do not Migrate%drive%\!asset!"
  )
)
exit /b 0

【讨论】:

  • echo move 应该只是 move,可能是测试的剩余部分。这条评论只是一个提醒,我会在一天内删除它。
猜你喜欢
  • 2021-10-29
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多