【问题标题】:Using an iterating variable in command-line script to create file names在命令行脚本中使用迭代变量来创建文件名
【发布时间】:2017-08-24 20:31:33
【问题描述】:

我正在尝试使用批处理文件自动执行 adb 测试过程。每次运行一个文件后,都会生成.CloudData.txt。我想在该文件名前加上试用号,T1.CloudData.txt 等。我制作了这个测试代码:

echo off
set /p loops="Enter a number of iterations: "
for /l %%i in (1,1,%loops%) do (
    set file=//scard//mytest//T%%i.CloudData.txt
    echo %file%
)

所以最终我可以得到类似的东西:

echo off
set /p loops="Enter a number of iterations: "
for /l %%i in (1,1,%loops%) do (
    rem Execute adb commands for test
    set file=//scard//mytest//T%%i.CloudData.txt
    adb shell mv /sdcard/mytest/.CloudData.txt file
)

但测试返回,假设loops = 3, /sdcard/mytest/T3.CloudData.txt 3 次。具体来说,存储在loops 中的数字被添加到%%i 应该在的位置。从我在以下帖子中读到的内容:bash script variable inside variable,我认为我应该使用数组,但如果有一天我必须运行测试超过数组允许的迭代次数,那是不切实际的。我应该如何进行?

【问题讨论】:

  • 请注意:这不是 PowerShell,实际上是 Command Shell。您应该编辑您的标题和标签,以将您的问题定位到合适的人!
  • 谢谢!很抱歉给您带来不便。
  • 它也不是 bash,它的 batch。我会解决的。
  • 谢谢,再次抱歉。

标签: batch-file command-line adb


【解决方案1】:

你需要delayed expansion:

echo off
setlocal enabledelayedexpansion
set /p loops="Enter a number of iterations: "
for /l %%i in (1,1,%loops%) do (
    rem Execute adb commands for test
    set file=//scard//mytest//T%%i.CloudData.txt
    adb shell mv /sdcard/mytest/.CloudData.txt !file!
)

%%i 的原因似乎是 3 在所有三个时间(它不是)是变量 %file%,它是您的脚本之前运行留下的

【讨论】:

  • 非常感谢!如果您不介意,您能否解释一下调用!file! 与调用%file% 有何不同?
  • @alwaysthestudent 请阅读第一批问题delayedexpansion 最简单的研究工作会发现这一点。
  • 感谢资源,很有启发性;很抱歉浪费了您的时间。
猜你喜欢
  • 2016-01-14
  • 2023-01-13
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多