首页 文章

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

提问于
浏览
0

我正忙着在我的工作场所制作一个批处理脚本,它可以自动将10台不同的计算机与一个网络驱动器同步 .

网络驱动器包含某些研究文件夹和随附的开始菜单,用于这些研究,它与每台计算机同步 . 例:

Study folder = D:\ Studyfolder1234开始菜单=%USERPROFILE%\ Desktop \ Startmenu1234

我正在尝试构建一个循环通过计算机上的文件夹的for循环,并相应地同步它们 . 我通过在批处理脚本中添加延迟来计算访问网络驱动器所需的时间:'ping -n 30 -w 1000 127.0.0.1> nul' .

我希望批处理脚本自动执行以下操作:

同步后,只要本地计算机上存在不再存在网络驱动器上的文件(例如Studyfolder5241),本地“startmenu5241”就会自动移动到本地“studyfolder5241”作为子文件夹 . 在此之后,我希望将本地“studyfolder5241”移动到另一个本地文件夹(存档文件夹) .

在批处理脚本方面,我是初学者,但我设法让xcopy命令工作:

(G:\ =网络驱动器)(D:\ =本地计算机)

xcopy / s / d“G:\ Startmenus \”“%USERPROFILE%\ Desktop \”xcopy / s / d“G:\ Study Folders \”“D:\”

然后我看了'for / D',但我发现自己无法根据foldername的最后4位数来计算一个工作变量(在我的例子中是'5241'),我认为这应该是最简单的方法 . 自动同步(因为我们所有的研究文件夹和开始菜单都以类似的4位数字串结束) . 我也查看了'MOVE'命令,它看起来很容易理解,但我只能在找出正确的条件语句('如果文件夹存在于本地,但不在网络驱动器上,那么......')之后实现这一点 .

任何人都可以帮我解决这个问题吗?如果我遗漏了什么,请指出我,我会尝试合作 .

亲切的问候,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%”

移动“D:\ Foldername后跟%fold1%”“D:\ Archive \”

))

SETLOCAL DISABLEDELAYEDEXPANSION

cmd / k

1 回答

  • 0

    那么答案是如何获取文件夹名称的某些部分?您无法从xcopy执行此操作,但您可以使用for循环 . 不幸的是,由于CMD的限制,脚本比它应该更复杂:

    @ECHO OFF
    
     SETLOCAL ENABLEDELAYEDEXPANSION
    
     FOR /D %%F IN (%CD%\*) DO (
        SET fold=%%~nF
        ECHO !fold:~-4!
     )
    
     SETLOCAL DISABLEDELAYEDEXPANSION
    

    该脚本打印当前路径中所有目录的最后4个字符 .

    问题是部件提取不适用于循环变量 . 此外,CMD需要设置特殊选项来改变循环内的变量值 .

相关问题