【问题标题】:How do I make a path a variable and then move that file如何使路径成为变量,然后移动该文件
【发布时间】:2015-12-16 20:31:22
【问题描述】:

我正在尝试创建一个批处理文件来搜索 .pst 文件,然后将这些文件移动到特定位置。到目前为止,这就是我所拥有的。请帮忙。

cd \   
setlocal enabledelayedexpansion 

for /r %%i in (*.pst) do (   
::echo %%~i

set MyPath=%i%   
move "%MyPath%" "C:\users\zack.vigrass\desktop\"
)

endlocal

PAUSE

编辑:我没有意识到我不是在问问题。我主要是在问为什么它返回一个空白文件而不是预期的 .pst 文件。

【问题讨论】:

  • 为什么不直接move %%i?我猜%i% 在你的例子中只是一个错字?如果所有这些都不适用:请说明您的具体问题,目前您只是陈述事实而不是提问。
  • 著名的delayed expansion trap 的另一个受害者...(当然还有那个错字,@Marged 指出)
  • 设置 "MyPath=%%i" (周围有 qoutes 和 % 更正),所以任何尾随空格将不再成为 MyPath 值的一部分...
  • 在代码块中小心使用:: Comment,在那里使用rem comment 更安全。

标签: variables batch-file command-line


【解决方案1】:
set MyPath=%i%   

不会mypath 设置为控制for 循环的元变量的内容(%%i,但会将其设置为i 的内容,这是一个普通的环境变量,很可能是未定义的,因此 nothing

额外的问题:行上的尾随空格将包含在分配的值中。

因此mypath 将获得(几个空格)的值

move "%MyPath%" "C:\users\zack.vigrass\desktop\"

不幸的是,批处理将块(一系列带括号的语句)中的任何 %var% 的值替换为遇到 for(在本例中)时该变量的值。

由于遇到formypath是未定义的,那么结果会是

move "" "C:\users\zack.vigrass\desktop\"

在这种情况下似乎没有理由将值转移到mypath

move "%%i" "C:\users\zack.vigrass\desktop\"

应该适合你。

【讨论】:

  • 谢谢,这似乎解决了我的问题。感谢您的帮助。
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2018-09-29
  • 2021-08-31
相关资源
最近更新 更多