这是一个后续行动,我的问题在这个线程问: Extracting string after last instance of delimiter in a Batch file对于Windows批处理文件循环:错误:“该命令的语法不正确”
我正在写一个批处理文件,从Java程序(它调用.bat)作为参数获取未知数目的字符串表示目录。这些目录保存在一个名为“dirs”的“数组”中。
for /F "tokens=2 delims==" %%z in ('set dirs[') do (
set "parm=%~1"
for %%a in (%parm:\= %) do set folder=%%a
echo %folder%
shift
)
的“显示目录”阵列将就实际目录,而不以任何方式改变它,最终我将使用它作为XCOPY目录从被复制。 Parm将实际参数放入批处理文件中,并对其进行处理以提取目录的最后部分。名为“文件夹”的变量存储此目录名称并将其打印到命令行。但是,当我运行该程序时,我经常会收到一个错误,提示“命令的语法不正确”。我试图缩小问题出在哪里,而且它绝对在上面的循环中。为了让外环工作,%% z必须以某种方式操作吗?当我用简单的“echo %% z”替换它的内容时,循环就起作用,所以它让我想知道这是否是问题所在。
编辑:这里是更新的循环,用XCOPY线包括:
for /F "tokens=2 delims==" %%z in ('set dirs[') do (
set "param=%~1"
set param=!param:\= !
for %%a in (!param!) do set lastDir=%%a
echo !lastDir!
XCOPY %%z\*.* !outdrive!:\!dir!\!lastDir! /C /S /D /Y /I
shift
)
在你需要知道,“outdrive”是一个外部硬盘驱动器的情况下,“dir”是以前创建的备份目录在程序中,lastDir应该是不言自明的。这是文件夹的名称,即“图片”或“文件”
最后编辑:
谢谢大家谁回答。我踢自己没有看到答案之前,但我已经找到了一些预期的代码。这里是循环,因为它目前是,正常操作:
for /F "tokens=2 delims==" %%z in ('set dirs[') do (
set param=%%z
set param=!param:\= !
for %%a in (!param!) do set lastDir=%%a
XCOPY %%z\*.* !outdrive!:\!dir!\!lastDir! /C /S /D /Y /I
)
而是使用批处理文件中传递的参数,我直接从“迪尔斯”阵列工作。然后,我为指定的目录字符串设置一个不同的变量,并对该变量进行操作,而不是存储在数组中的字符串。
只是[今天回答](http://stackoverflow.com/a/20001130/2861476)。不是相同的代码,但相同的问题。请根据需要进行调整。 –
而且,你为什么迭代dirs数组而不使用数据?而且,如果dirs数组已经从已经被移位迭代的参数中填充,那么参数被消耗,没有更多的参数,那么,%1会有什么值? –
我将最终使用“dirs”数组,我已经调整了这个循环,以便进行调试。 “dirs”不是通过使用Shift迭代来填充的,我使用了一个稍微更复杂的系统来获取“dirs”数组的值,而无需操作批处理输入参数。至于链接,我明白他们在说什么,但我看不到我的哪些变量是在循环内部声明的,然后在内部进行更改。我在循环中使用的所有变量都是在循环内部创建的,所以我对链接中的代码如何相关有点困惑。 – DerStrom8