simbolico - destino de enlace simbólico de windows
mklink/j ejemplos (4)
Digamos que configuro un enlace simbólico:
mklink /D C:/root/Public/mytextfile.txt C:/root/Public/myothertextfile.txt
Nota del editor: La opción /D
, que es para crear enlaces simbólicos de directorio , está en desacuerdo con los archivos de segmentación, como en este ejemplo, lo que ha causado cierta confusión. Para crear un enlace simbólico de archivo , simplemente omita /D
¿Hay alguna forma de ver cuál es el objetivo de myothertextfile.txt
utilizando la línea de comandos?
Como dijo Harry Johnston, el comando dir
muestra el objetivo de los enlaces simbólicos
2014/07/31 11:22 <DIR> libs
2014/08/01 13:53 4,997 mobile.iml
2014/07/31 11:22 689 proguard-rules.pro
2014/09/28 10:54 <JUNCTION> res [/??/C:/Users/_____/mobile/src/main/res]
Para complementar la útil respuesta de Paul Verest :
Si bien el
dir
cmd
hecho muestra el tipo de enlace y la ruta de destino, la extracción de esa información no es trivial; consulte a continuación una alternativa de PowerShell.Para descubrir todos los enlaces en el directorio actual, use
dir /aL
.
Soluciones PowerShell (PSv5 +):
Enumere todos los enlaces y sus destinos en el directorio actual como rutas completas:
PS> Get-ChildItem | ? Target | Select-Object FullName, Target
FullName Target
-------- ------
C:/root/public/mytextfile.txt {C:/root/Public/myothertextfile.txt}
Determine el objetivo de un enlace dado:
PS> (Get-Item C:/root/Public/mytextfile.txt).Target
C:/root/Public/myothertextfile.txt
Tal vez alguien esté interesado en un método de C # para resolver todos los enlaces simbólicos de directorio en un directorio similar a Directory.GetDirectories (). Para enumerar enlaces simbólicos de uniones o archivos, simplemente cambie la expresión regular.
static IEnumerable<Symlink> GetAllSymLinks(string workingdir)
{
Process converter = new Process();
converter.StartInfo = new ProcessStartInfo("cmd", "/c dir /Al") { RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, WorkingDirectory = workingdir };
string output = "";
converter.OutputDataReceived += (sender, e) =>
{
output += e.Data + "/r/n";
};
converter.Start();
converter.BeginOutputReadLine();
converter.WaitForExit();
Regex regex = new Regex(@"/n.*/<SYMLINKD/>/s(.*)/s/[(.*)/]/r");
var matches = regex.Matches(output);
foreach (Match match in matches)
{
var name = match.Groups[1].Value.Trim();
var target = match.Groups[2].Value.Trim();
Console.WriteLine("Symlink: " + name + " --> " + target);
yield return new Symlink() { Name = name, Target = target };
}
}
class Symlink
{
public string Name { get; set; }
public string Target { get; set; }
}
todos los créditos a @SecurityAndPrivacyGuru , [cmd]
script / función de lotes completos que lee enlaces simbólicos {| s en la carpeta} y muestra la lista con ellos y sus rutas de destino
@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^
rem br;
set "pafIf=<<pafToSymlink|pafToFolder>>"
set "gIfZsymLink="
for /f "tokens=*" %%q in (''dir "!pafIf!" /al /b'') do (
for /f "tokens=2 delims=[]" %%r in (''dir /al ^| findstr /i /c:"%%q"'') do (
set "gIfZsymLink=!gIfZsymLink!%%~fq>%%r!br!"
)
)
set "gIfZsymLink=!gIfZsymLink:~0,-1!"
rem echo "!gIfZsymLink!"
for /f "tokens=1,2 delims=>" %%q in ("!gIfZsymLink!") do (
echo symlink: %%q , filepath: %%r
)
:scIn
rem endlocal
pause
rem exit /b