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

Batch file 在批处理脚本中设置特定变量(用于文件夹名称),batch-file,if-statement,for-loop,sync,Batch File,If Statement,For Loop,Sync,我正忙着在我的工作场所制作一个批处理脚本,用一个网络驱动器自动同步10台不同的计算机 网络驱动器包含特定的研究文件夹和这些研究的附带开始菜单,并同步到每台计算机。例如: 研究文件夹=D:\Studyfolder1234 开始菜单=%USERPROFILE%\Desktop\Startmenu1234 我试图构建一个for循环,在计算机上的文件夹中循环,并相应地同步它们。我通过在批处理脚本中添加延迟来说明访问网络驱动器所需的时间:“ping-n30-w1000127.0.0.1>nul” 我希望批

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

网络驱动器包含特定的研究文件夹和这些研究的附带开始菜单,并同步到每台计算机。例如:

研究文件夹=D:\Studyfolder1234 开始菜单=%USERPROFILE%\Desktop\Startmenu1234

我试图构建一个for循环,在计算机上的文件夹中循环,并相应地同步它们。我通过在批处理脚本中添加延迟来说明访问网络驱动器所需的时间:“ping-n30-w1000127.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”命令,它看起来确实很容易理解,但我只有在找到正确的条件语句后才能实现它(“如果文件夹存在于本地,但不在网络驱动器上,那么…”)

有人能帮我解决这个问题吗?如果我遗漏了什么,请向我指出,我会努力合作

亲切问候,, 尤里安

编辑:

@回音

SETLOCAL ENABLEDELAYEDEXPANSION

对于(%USERPROFILE%\desktop*)中的/D%%F,请执行以下操作( 集合fold1=%%~nF 回声桌面!fold1:~-4

如果不存在“D:\Folder1\Foldername后跟%fold1%”(

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

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

) )

SETLOCAL DISABLEDELAYEDEXPANSION


cmd/k

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

 @ECHO OFF

 SETLOCAL ENABLEDELAYEDEXPANSION

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

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


问题在于,零件提取不适用于循环变量。此外,CMD需要设置特殊选项以更改循环内的变量值。

嘿,谢谢您的帮助!我的剧本写得很好。在这一点上,我无法弄清楚的是如何识别文件夹并移动它们。我已经用新脚本更新了我的问题。请注意,如果对某个变量使用延迟展开,则必须进一步使用它。因此,循环看起来可能类似于
DO(SET fold=%%~nF SET FoldNum=!fold:~-4!MOVE”%USERPROFILE%\desktop\startmenu!FoldNum!“%RemotePath%\studyfolder!FoldNum!”)
(这里我们提取文件夹编号,然后在需要时使用它,还请检查实际的
MOVE
,因为它不会自动传输文件夹)