【问题标题】:batch file to symbolic link files from different folders into common folder批处理文件到符号链接文件从不同的文件夹到公共文件夹
【发布时间】:2020-07-09 09:48:54
【问题描述】:

我一直在尝试从多个来源创建符号链接。

我在new 目录中有一个reg.txt 文件以及sort.bat。

reg.txt :-

redcar1=123456
greencar2=345678

在名为vehicles 的目录中,子目录为“reg_numbers”,即:-123456, 在该目录中,我有一个名为keyskey 的子目录,其中包含一个*.txt 文件。

我想将所有'reg_numbers'(解析reg.txt - 在进程中更改文件夹名称)目录符号链接到sort.bat文件所在的new目录,以及所有keysKey 目录文件(*.txt),放到new 文件夹中的公共keys 目录中

这么说:-

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

符号链接

  • 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" 
    )
)

这可能是一团糟,但它几乎适用于所有东西,但我无法从 key 文件夹中获取 that.txt

【问题讨论】:

  • 如果您使用命令sort,建议您将 sort.bat 命名为其他名称,因为它与 sort.exe 同名。也许是一个更独特的名字。

标签: for-loop batch-file directory mklink


【解决方案1】:
@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.txtthat.txt 的符号链接。您有一个 keys 文件夹和一个 key 文件夹,但您的代码只搜索其中一个文件夹。所以现在dir 将搜索这两个目录。

我还调整了引用并在for 变量中使用~ 来删除可能的引号。在需要的地方添加反斜杠作为路径分隔符。

set 命令的双引号是为了确保该值不包含任何不可见的尾随空格。

for命令中的2^>nul是将stderr流重定向到nul,所以dir找不到文件的输出不会输出。

usebackq in for options 更改命令的规则。没有usebackq 的双引号将双引号解释为字符串,而不是路径。使用usebackq,可以在路径上使用双引号。 %~dp0 是一个可能有空格的路径,所以添加双引号似乎是个好主意。查看for /?获取更多帮助。

【讨论】:

  • 感谢您的帮助,它有效。作为初学者,我将研究您为什么引用set "" 并添加'2^>nulusebackq。我是新人,我错过了key 文件夹,但不知道如何添加它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多