我正忙于在我的工作场所制作一个批处理脚本,它可以自动将10台不同的计算机与一个网络驱动器同步。
网络驱动器包含这些研究的某些学习文件夹和随附的开始菜单,它们与每台计算机同步。示例:
学习文件夹= D:\ Studyfolder1234 开始菜单=%USERPROFILE%\ Desktop \ Startmenu1234
我正在尝试构建一个循环遍历计算机上的文件夹的for循环,并相应地同步它们。我通过在批处理脚本中添加延迟来计算访问网络驱动器所需的时间:  ping -n 30 -w 1000 127.0.0.1> NUL'
我希望批处理脚本自动执行以下操作:
同步后,只要本地计算机上存在一个文件,该文件在网络驱动器上不再存在(例如Studyfolder5241),本地' startmenu5241'自动移动到本地' studyfolder5241'作为子文件夹。在此之后我想要当地的研究文件夹5241'要移动到另一个本地文件夹(存档文件夹)。
我是批处理脚本的初学者,但我设法让xcopy命令工作:
(G:\ =网络驱动器) (D:\ =本地计算机)
xcopy / s / d" G:\ Startmenus \" "%USERPROFILE%\桌面\" xcopy / s / d" G:\ Study Folders \" " d:\"
然后我查看了/ D',但我发现自己无法根据foldername的最后4位计算工作变量(在我的例子中它是'' ; 5241'),我认为应该是完成自动同步的最简单方法(因为我们所有的研究文件夹和开始菜单都以类似的4位数字串结束)。我还查看了“MOVE&#39”命令,它看起来很容易理解,但我只能在找出正确的条件语句后才能实现这一点('如果文件夹存在于本地,但不存在于网络驱动器上,然后...&#39)
有人可以帮我解决这个问题吗?如果我遗失了什么,请指出我,我会尝试合作。
亲切的问候, Jurriaan
编辑:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR / D %% F IN(%USERPROFILE%\ desktop *)DO( SET fold1 = %% ~nF ECHO桌面!fold1:〜-4!
如果不存在" D:\ Folder1 \ Foldername后跟%fold1%" (
移动"%USERPROFILE%\ desktop \ Foldername后跟%fold1%" " D:\ Foldername后跟%fold1%"
MOVE" D:\ Foldername后跟%fold1%" " d:\存档\"
) )
SETLOCAL DISABLEDELAYEDEXPANSION
cmd / k
答案 0 :(得分:0)
所以答案是如何获取文件夹名称的某些部分?您无法从xcopy执行此操作,但您可以使用for循环。不幸的是,由于CMD的限制,脚本比它应该更复杂:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /D %%F IN (%CD%\*) DO (
SET fold=%%~nF
ECHO !fold:~-4!
)
SETLOCAL DISABLEDELAYEDEXPANSION
该脚本打印当前路径中所有目录的最后4个字符。
问题是部件提取不适用于循环变量。此外,CMD需要设置特殊选项来改变循环内的变量值。