回顾:在 cmd.exe 和 PowerShell 的 for 循环中迭代变量赋值

Revisited: Iterating variable assignment within for-loops in cmd.exe and PowerShell

关于在 for 循环中迭代变量赋值的问题在 Stack Overflow 上由来已久。最突出的是中的解决方案:

#!/bin/bash

for i in {1..28}
do
    if [ $i -le 9 ]
    then
        cd /change/to/target/folder/and/numerated/sub/folder0${i}
        sh RunScript.sh data_0${i}.file
    else
        cd /change/to/target/folder/and/numerated/sub/folder${i}
        sh RunScript.sh data_${i}.file
    fi
done

(else前后的差值是${i}前的0)

循环中迭代变量名的内联 shell 扩展也在 Stack Overflow 上针对 python and R 进行了讨论。

这里想问下.bat文件如何做这样的操作,一次用cmd.exe执行一次,也用Microsoft PowerShell执行一次,有没有区别。

到目前为止,我的代码如下所示:

FOR /L %i IN (1,28) DO (
pscp user@server.url.de:/path/to/target/folder/and/numerated/sub/folder%i/data_%i.file H:\path\to\target\folder\data%i.file
server_password

显然,这段代码不起作用,但是 (a) 我想知道什么代码可以起作用,以及 (b) cmd.exe 和 PowerShell 的代码之间是否有区别。

编辑:

我现在有这个:

@ECHO OFF
FOR /L %%i IN (1,1,28) DO (
IF (%%i LEQ 9) (
pscp H:\path\to\iterated\directory\subfolder%%i\and\files\*.as user@server.url.de:/path/to/iterated/directory/subfolder0%%i/files/
serverpassword
) ELSE (
pscp H:\path\to\iterated\directory\subfolder%%i\and\files\*.as user@server.url.de:/path/to/iterated/directory/subfolder%%i/files/
serverpassword)
)

但我收到一条错误消息: ""("此时无法进行句法处理"".

对于那些碰巧和我有同样问题的人,这里的答案是适用于 for-loop/if 结构的代码,带有一个增量变量作为批处理脚本:

@ECHO OFF
FOR /L %%i IN (1,1,28) DO (    ::The numbers refer to start, step and end
IF %%i LEQ 9 (
pscp H:\path\to\iterated\directory\subfolder%%i\and\files\*.as user@server.url.de:/path/to/iterated/directory/subfolder0%%i/files/
serverpassword
) ELSE (
pscp H:\path\to\iterated\directory\subfolder%%i\and\files\*.as user@server.url.de:/path/to/iterated/directory/subfolder%%i/files/
serverpassword)
)