Вы можете использовать PowerShell! Сохраните следующий сценарий как файл .ps1
, а затем следуйте разделу «Включение сценариев» в вики-теге PowerShell.
$sharepaths = gwmi -Class 'Win32_Share' | ? {-not $_.Name.EndsWith('$')} | % {$_.Path.ToUpperInvariant()} | sort
$lastroot = $null
ForEach ($path In $sharepaths) {
If ($lastroot -ne $null -and $path.StartsWith($lastroot)) {Continue}
$lastroot = $path
# Run backup command here
}
Он работает, получая все экземпляры Win32_Share
WMI (например, ваш пакетный файл), фильтруя их до тех, которые не заканчиваются на $
(который обозначает скрытый общий ресурс), извлекает только путь в верхнем регистре и сортирует список дорожек. Такая сортировка важна, когда мы перебираем список. Если текущий путь начинается с пути последнего "корневого" общего ресурса, мы пропускаем его, поскольку он уже был заархивирован.
Вам необходимо заменить строку комментария #
процедурой, которая запускает резервное копирование. В этот момент переменная $path
содержит локальный путь к общему ресурсу. Вы также можете запускать утилиты не PowerShell, такие как xcopy
или robocopy
.
В качестве альтернативы, вы можете заменить эту строку только $path
, которая возвращает путь к текущему общему ресурсу вызывающей стороне скрипта. В этой стратегии вы вызываете сценарий PowerShell из пакета, а затем делаете что-то с каждой возвращаемой строкой (т. Е. С каждым путем), используя обычный пакетный цикл. Например, если вы назвали вышеупомянутый скрипт shareroots.ps1
, вы можете запустить его так:
powershell .\shareroots.ps1