пакетный файл для обозначения символов c из разных папок в общую папку - PullRequest
0 голосов
/ 28 марта 2020

Я пытался создать символические c ссылки из нескольких источников.

У меня есть файл reg.txt в каталоге new, а также sort.bat.

the reg.txt: -

redcar1=123456
greencar2=345678

В каталоге с именем vehicles с подкаталогами 'reg_numbers' ie: - 123456, в этом каталоге у меня есть подкаталог с именем keys или key, с файлом *.txt.

Я хочу, чтобы символика c связывала все 'reg_numbers' (парсинг reg.txt - изменение имени папки в каталоги process) в каталог new, в котором находится файл sort.bat, и все файлы каталога keys или Key (* .txt) в общий каталог keys в папке new

так сказать: -

  • D:\vehicles\123456\keys\this.txt
  • D:\vehicles\345678\key\that.txt

символов c связанных

  • e:\new\redcar1\
  • e:\new\greencar2\
  • e:\new\keys\this.txt
  • e:\new\keys\that.txt

sort.bat находится в новой папке .

@echo off
setlocal EnableDelayedExpansion

set NEWPATH=%~dp0
set OLDPATH=d:\vehicles

for /f %%d in ('dir /b %NEWPATH%\keys') do (
    if not "%%d"=="not.txt" del /Q "%NEWPATH%Keys\%%d" ::clean out files
)
for /f "tokens=1,2 delims=="  %%a in (reg.txt) do (
    rmdir /Q "%NEWPATH%%%a" ::clean out dir
    mklink /D %NEWPATH%"%%a" %OLDPATH%\"%%b"
    for /f %%c in ('dir /b %OLDPATH%\%%b\keys' ) do (

    mklink %NEWPATH%Keys\"%%c" %OLDPATH%\"%%b"\"%%c" 
    )
)

Возможно, это беспорядок, но он работает почти для всех но я не могу получить that.txt из папки key.

1 Ответ

0 голосов
/ 29 марта 2020
@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 /? для получения дополнительной помощи.

...