@echo off
setlocal EnableDelayedExpansion
set "NEWPATH=%~dp0"
set "OLDPATH=D:\vehicles"
for /f %%A in ('2^>nul dir /b /a-d "%NEWPATH%\keys"') do (
if not "%%~A" == "not.txt" del /Q "%NEWPATH%\Keys\%%~A"
)
for /f "usebackq tokens=1,2 delims==" %%A in ("%NEWPATH%\reg.txt") do (
rmdir /Q "%NEWPATH%\%%~A"
mklink /D "%NEWPATH%\%%~A" "%OLDPATH%\%%~B"
for /f %%C in ('2^>nul dir /b "%OLDPATH%\%%~B\keys" "%OLDPATH%\%%~B\key"' ) do (
mklink "%NEWPATH%\Keys\%%~C" "%OLDPATH%\%%~B\%%~C"
)
)
Это может помочь получить символические ссылки на файлы this.txt
и that.txt
. У вас есть папка keys
и папка key
, но ваш код ищет только каталог одной из них. Так что теперь dir
будет искать в обоих каталогах.
Я также настроил кавычки и использую ~
в переменных for
для удаления возможных кавычек. Обратные слеши добавляются в качестве разделителей пути, где это необходимо.
Двойные кавычки для команд set должны гарантировать, что значение не включает в себя завершающий пробел, который невидим для просмотра.
2^>nul
в Команда for
предназначена для перенаправления потока stderr на nul
, поэтому вывод файлов, найденных dir
, не будет выводиться.
usebackq
в параметрах for
изменяет правила для команды. Двойные кавычки без usebackq
, интерпретируют двойные кавычки как строку, а не путь. С usebackq
двойные кавычки могут использоваться на пути. %~dp0
- это путь, в котором могут быть пробелы, поэтому стоит добавить двойные кавычки. Смотрите for /?
для получения дополнительной помощи.