我找到了一些非常好的例子,但不是我真正需要的。我的目标是拥有一个批处理脚本,该脚本可以每晚运行,以使用位于驱动器根目录下的文件的新副本替换文件的所有实例(在我的情况下为timthumb.php)。

到目前为止,这就是我所拥有的...

for /f %%a IN ('dir /b C:\thumb_test') do copy /y C:\thumb_test\timthumb.php %%a

这已经接近我了,它将替换C:\thumb_test\test1\timthumb.php等文件夹中的timthumb.php实例,但不会深入目录。例如,未替换C:\thumb_test\test2\level2\timthumb.php。此外,替换文件后,它看起来像尝试读取实际的timthumb.php并输出了许多错误,例如...
C:\thumb_test>by Tim McDaniels and Darren Hoyt
'by' is not recognized as an internal or external command,
operable program or batch file.

我发现/R是递归的,但是当我尝试以下操作时,它也不起作用。
for /f %%a IN ('dir /b C:\thumb_test') do copy /y C:\thumb_test\timthumb.php %%a

这给了我结果:
C:\thumb_test> test.bat
此时%a是意外的。
C:\thumb_test>for /r /f %a IN ('dir /b C:\thumb_test') do copy /y C:\thumb_test\
timthumb.php %a

我的DOS知识是有限的,所以我希望其中的一位专家有个主意。

谢谢
-山姆

对于使用timthumb的任何人,请注意http://markmaunder.com/2011/08/01/zero-day-vulnerability-in-many-wordpress-themes/,并确保您的网站安全。

最佳答案

for /R c:\thumb_test %%a in (timthumb.php) do if exist "%%a" copy /y c:\thumb_test\timthumb.php "%%a"

或者,使用更可靠的robocopy代替copy:
for /R c:\thumb_test %%a in (.) do robocopy /xl c:\thumb_test "%%a" timthumb.php

关于windows - Dos Batch脚本-用主文件递归替换文件实例(防止timthumb攻击),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7167420/

10-11 21:16