批处理文件,在多台电脑上重命名文件并复制新版本

批处理文件,在多台电脑上重命名文件并复制新版本

这是我迄今为止根据过去使用过的内容编写的脚本。我掌握了基础知识,并在编写过程中构建和研究事物。

我目前在回显重命名/复制后收到语法错误。

你能帮忙吗?

echo SWIFT UPDATER
echo off
echo off
echo Ready to go?
pause

for /F "tokens=*" %%1 in (pc_list.txt) do (
echo Renaming / Copying files to %
Ren /f "\\%%1\c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.txt" "c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.old"

copy "\\server\infratech\Servereng\APPS-UK\Swift Update\wsnaddr.txt" "\\%%1\c$\Program Files (x86)\SWIFT\NSL\jnsl\" >> "\\server\infratech\Servereng\APPS-UK\Swift Update\log.txt"
)
:::: End Copy ::::::
@echo off

答案1

这个脚本有很多错误。

对于/F“tokens=*”%%1在(pc_list.txt)中执行(

for语句必须使用 alpha 值作为变量(参见MS 文档)。不是数字变量 - 数字变量被保留用于传递给批处理文件的参数。

尝试一下这样的方法。

for /F "tokens=*" %%a in (pc_list.txt) do (

和 ...

echo 重命名/复制文件至 %

需要更改为

echo Renaming /Copying files to %%a

和...

Ren /f "\%%1\c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.txt" "c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.old"

需要更改为:

IF EXIST "\\%%a\c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.old" del /f /q "\\%%a\c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.old"
ren "\\%%a\c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.txt" wsnaddr.old

因为没有/f参数,第二个参数应该是一个简单的文件名,而不是完整的路径(见MS 文档) 。(当然,我已经将其更改%%1为匹配新%%a变量)

我也对所有语句感到困惑。通常脚本开头echo off只有一个语句。但是,这不应该导致任何错误。它只是有时会造成输出混乱。@ECHO OFF

<command> /?如果您还没有发现这一点,我建议您查看命令行的输出。它应该包含与我链接到的 MS 文档相同的信息。

答案2

谢谢,这似乎有效

对于/F“tokens=*”%%a在(pc_list.txt)中执行(

ren "\%%a\c$\Program Files (x86)\SWIFT\NSL\jnsl\wsnaddr.txt" wsnaddr.old

copy "\\server\infratech\Servereng\APPS-UK\Swift Update\wsnaddr.txt" "\\%%a\c$\Program Files (x86)\SWIFT\NSL\jnsl\" >> "\\server\infratech\Servereng\APPS-UK\Swift Update\log.txt"
)

相关内容