批处理文件 - 使用具有可变数量变量的 xcopy 循环?

Posted

技术标签:

【中文标题】批处理文件 - 使用具有可变数量变量的 xcopy 循环?【英文标题】:Batch File - Loop using xcopy with variable number of Variables? 【发布时间】:2021-03-16 04:22:55 【问题描述】:

我是一名律师助理,需要为每个进来的合同创建文件夹和文件。文件夹将仅命名为地址,内部将有 2 个空文件夹和 2 个准备好的文件,一个 DOCX 和需要用名称中的地址修改的 TXT。我保留了一个简单命名为“@”的示例文件夹,以便它位于文件夹列表的顶部。我写了一个脚本来复制我需要重命名的东西:

xcopy "@" "$VAR1" /e /i
cd "$VAR1"
rename "Deed - Blank.docx" "Deed - $VAR1.docx"
rename "Deed Prep.txt" "$VAR1 Deed Prep.txt"
cd..

这节省了一些时间,但到目前为止,每当我需要使用它时,我都会将其复制到记事本窗口中,然后使用 Control+H 将“$VAR1”的所有实例替换为地址。然后我再次复制基本脚本,并使用新地址控制 + H。当我拥有一切后,我打开一个命令窗口到根文件夹,然后粘贴命令。有时我们会收到 3 份新合同,有时是 10 份,但情况总体上会好转,所以我知道我需要将其设为适当的循环以节省更多时间。

通过搜索,我现在知道我需要的部分是 set /pfor /l 但是.. 我只是不知道如何将这些部分组合在一起。我需要能够以某种方式输入地址,因此无论是一次提示一个,还是一次全部提示,还是在主命令中输入它们,比如script.bat "123 Happy St" "1600 Pennsylvania Ave" "32 John's Wall Dr",这比我现在的做法要好得多。

提前致谢!

【问题讨论】:

不是用新值编辑脚本,而是用参数引用%1%2 等替换变量值,并使用相关参数从命令提示符调用脚本。 【参考方案1】:
@echo off
setlocal
:again
set "property=%~1"
if not defined property goto :eof

xcopy "@" "%property%" /e /i
cd "%property%"
rename "Deed - Blank.docx" "Deed - %property%.docx"
rename "Deed Prep.txt" "%property% Deed Prep.txt"
cd..

shift
goto again

前两行 1) 抑制对控制台执行的命令的 echo 和 2) 确保在批处理结束时撤消对环境的任何更改。这可确保后续批处理文件不会因在同一会话中的先前批处理运行中建立的变量而发生交互。

标签again 只是一个返回点(需要冒号)

set 命令获取第一个参数,删除其周围的引号,并将结果分配给变量 property

如果没有更多参数,property 将被取消分配,所以退出批处理(冒号是必需的)

然后在您的例程中,通过用% 包围变量名,在命令中使用property 的值。

最后,shift 参数 - 丢弃 %1 并将剩余的随机播放,因此 %2 变为 %1,等等。

然后您可以以script.bat "123 Happy St" "1600 Pennsylvania Ave" "32 John's Wall Dr" 运行批处理

【讨论】:

哇。这是一件很美的事情。我知道我已经很接近了,但是我错过了一些片段。非常感谢 Magoo 把它放在一起。我刚刚尝试过,它绝对完美无缺。谢谢!!

以上是关于批处理文件 - 使用具有可变数量变量的 xcopy 循环?的主要内容,如果未能解决你的问题,请参考以下文章

M文件变量检测与传递

如何配置 Square 的 Retrofit Client 以处理具有可变数量参数的请求

具有可变大小变量列表的 MySQL 准备语句

使用可变数量的参数调用批处理文件

在T-SQL中具有可变数量的搜索条件的LIKE运算符

使用 xcopy 确定新文件