【问题标题】:Windows Batch File Iterator ProblemWindows 批处理文件迭代器问题
【发布时间】:2011-07-01 23:23:36
【问题描述】:

我有 3 个使用 svn 的项目。我的文件夹系统是:有一个文件夹projects,在projects文件夹中有3个项目projectAprojectBprojectC

我有一个这样的 Windows 批处理脚本代码:

d:
cd projectA
svn update
cd ../projectB
svn update
cd ../projectC
svn update

它的目的是使用一个 .bat 文件来更新我的所有项目。该代码似乎可以改进。是否可以像这样更改它:

set folder=projects
set directories=(projectA projectB projectC)
set command=svn update
d:
for %%i in %directories% do cd.. && cd %folder%/%%i && %command%

该代码在某处失败。它应该更改为while循环或类似的东西,因为它试图在项目文件夹下制作cd projects\projectB(它应该在项目的上层文件夹中执行cd项目\等)

编辑: @Andriy M 我的电脑上有一张截图。红色是项目A,蓝色是项目B,紫色是项目C。

在这里:

【问题讨论】:

  • 你能看到folder 赋值行后面的错误信息吗?这就是为什么您在以下循环中有不同路径的原因。路径不同,因为顶部分配不起作用,folder 具有您之前分配的值。您的文本编辑器可能已将批处理文件保存为 UTF-8 编码,从屏幕截图来看,文件的前三个字节很可能是 UTF-8 签名。但是 shell 无法识别它们,试图解释它们并失败。

标签: windows-7 batch-file


【解决方案1】:

是什么阻止你像这样实现它:

SET folder=D:\fullpath\project
SET directories=(projectA projectB projectC)
SET command=svn update
FOR %%i IN %directories% DO (CD /D %folder%\%%i && %command%)

?

【讨论】:

  • 我将文件夹名称设置为 d:\projects\projectA 但它尝试这样做: cd projects\projectA 而不是将 d:\ 放在它的开头。
  • @kamaci:不确定。顺便说一句,folder 应该是您项目的父文件夹,所以您可能应该将d:\projects 存储到其中。但这仍然不能解释为什么驱动器部分会从路径上掉下来。当我测试它时它工作得很好。你确定你应用正确了吗?
  • @kamaci - 你确定你没有错过CD之后的/D吗?
  • 很高兴了解如何更改我的代码以使其正常工作,但您的回答是可以的。谢谢安德烈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多