在批处理脚本中设置特定变量(用于文件夹名称)

时间:2015-07-08 11:47:33

标签: batch-file if-statement for-loop sync

我正忙于在我的工作场所制作一个批处理脚本,它可以自动将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

1 个答案:

答案 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需要设置特殊选项来改变循环内的变量值。