Batch file 在批处理脚本中设置特定变量(用于文件夹名称)
我正忙着在我的工作场所制作一个批处理脚本,用一个网络驱动器自动同步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 DISABLEDELAYEDEXPANSIONBatch 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” 我希望批
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
,因为它不会自动传输文件夹)