name windows command-line

windows - name - short path dos



Obtener la ruta de DOS en lugar de la ruta de Windows (8)

En una ventana de DOS, ¿cómo puedo obtener el nombre completo de DOS / nombre corto del directorio en el que me encuentro?

Por ejemplo, si estoy en el directorio C:/Program Files/Java/jdk1.6.0_22 , quiero mostrar su nombre corto C:/PROGRA~1/Java/JDK16~1.0_2 .

Sé que ejecutar dir /x me dará los nombres cortos de los archivos / directorios en el directorio actual, pero no he podido encontrar una manera de mostrar la ruta completa del directorio actual en formato de nombre corto. Tengo que avanzar por la ruta desde la raíz, directorio por directorio, ejecutando dir /x en cada uno.

Estoy seguro de que hay una manera más fácil de hacer esto?


Ejecute cmd.exe y haga lo siguiente:

> cd "long path name" > command

Entonces command.com aparecerá y mostrará solo rutas cortas.

source


En las secuencias de comandos de lote de Windows, %~s1 expande los parámetros de ruta a nombres cortos . Crea este archivo por lotes:

@ECHO OFF echo %~s1

Llamé a mi shortNamePath.cmd y lo llamo así:

c:/>shortNamePath "c:/Program Files (x86)/Android/android-sdk" c:/PROGRA~2/Android/ANDROI~1

Editar: aquí hay una versión que usa el directorio actual si no se proporcionó ningún parámetro:

@ECHO OFF if ''%1''=='''' (%0 .) else echo %~s1

Llamado sin parámetros:

C:/Program Files (x86)/Android/android-sdk>shortNamePath C:/PROGRA~2/Android/ANDROI~1


La respuesta de Kimbo es perfecta para archivos normales.

for %I in (.) do echo %~sI

Para nombres de archivo MsDos en HardLinks

Los enlaces duros creados con mklink /H <link> <target> no tendrán un nombre corto de archivo MsDos.

En caso de que dir /X y descubras ese nombre corto que falta, deberías esperar los siguientes:

d:/personal/photos-tofix/2013-proposed1-bad>dir /X Volume in drive D has no label. Volume Serial Number is 7C7E-04BA Directory of d:/personal/photos-tofix/2013-proposed1-bad 03/02/2015 15:15 <DIR> . 03/02/2015 15:15 <DIR> .. 22/12/2013 12:10 1,948,654 2013-1~1.JPG 2013-12-22--12-10-42------Bulevardul-Petrochimiștilor.jpg 22/12/2013 12:10 1,899,739 2013-12-22--12-10-52------Bulevardul Petrochimiștilor.jpg

Archivo normal

En este caso

> for %I in ("2013-12-22--12-10-42------Bulevardul-Petrochimiștilor.jpg") do echo %~sI

Tengo lo que esperaba

d:/personal/PH124E~1/2013-P~3/2013-1~1.JPG

Archivo de enlace duro

En este caso

> for %I in ("2013-12-22--12-10-52------Bulevardul-Petrochimiștilor.jpg") do echo %~sI

Tengo la ruta normal de MsDos pero el nombre de archivo normal.

d:/personal/PH124E~1/2013-P~3/2013-12-22--12-10-52------Bulevardul-Petrochimiștilor.jpg`


Ser un programador hizo este proyecto Winform de 10 minutos. Ha sido útil para mí. Convertir esta aplicación en un menú contextual para el explorador de archivos ahorraría más clics.

Form1.cs:

using System; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace ToShortPath { public partial class Form1 : Form { [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern int GetShortPathName( [MarshalAs(UnmanagedType.LPTStr)] string path, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath, int shortPathLength ); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Show the dialog and get result. var openFileDialog1 = new OpenFileDialog(); DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult.OK) // Test result. { textBox1.Text = openFileDialog1.FileName; } } private void button2_Click(object sender, EventArgs e) { var openFileDialog1 = new FolderBrowserDialog(); DialogResult result = openFileDialog1.ShowDialog(); if (result == DialogResult.OK) // Test result. { textBox1.Text = openFileDialog1.SelectedPath; } } private void textBox1_TextChanged(object sender, EventArgs e) { StringBuilder shortPath = new StringBuilder(65000); GetShortPathName(textBox1.Text, shortPath, shortPath.Capacity); textBox2.Text = shortPath.ToString(); } } }

Form1.Designer.cs:

namespace ToShortPath { partial class Form1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(69, 13); this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(516, 53); this.textBox1.TabIndex = 0; this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); // // textBox2 // this.textBox2.Location = new System.Drawing.Point(69, 72); this.textBox2.Multiline = true; this.textBox2.Name = "textBox2"; this.textBox2.ReadOnly = true; this.textBox2.Size = new System.Drawing.Size(516, 53); this.textBox2.TabIndex = 1; // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(7, 35); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(56, 13); this.label1.TabIndex = 2; this.label1.Text = "Long Path"; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(7, 95); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(57, 13); this.label2.TabIndex = 3; this.label2.Text = "Short Path"; // // button1 // this.button1.AutoSize = true; this.button1.Location = new System.Drawing.Point(591, 13); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(40, 53); this.button1.TabIndex = 4; this.button1.Text = "File"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.AutoSize = true; this.button2.Location = new System.Drawing.Point(637, 12); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(46, 53); this.button2.TabIndex = 5; this.button2.Text = "Folder"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(687, 135); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); this.Name = "Form1"; this.Text = "Short Path"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; } }


También puede ingresar lo siguiente en una ventana de CMD:

dir <ParentDirectory> /X

Donde <ParentDirectory> se reemplaza por la ruta completa del directorio que contiene el elemento para el que desea el nombre.

Si bien el resultado no es tan simple como la respuesta de Timbo , enumerará todos los elementos en el directorio especificado con el nombre real y (si es diferente) el nombre corto.

Si usa for %I in (.) do echo %~sI puede reemplazar el . con la ruta completa del archivo / carpeta para obtener el nombre corto de ese archivo / carpeta (de lo contrario, se devuelve el nombre corto de la carpeta actual).

Probado en Windows 7 x64.


Una respuesta más directa es arreglar el error.

% SPARK_HOME% / bin / spark-class2.cmd; Línea 54
Broken: set RUNNER="%JAVA_HOME%/bin/java"
Windows Style: set "RUNNER=%JAVA_HOME%/bin/java"

De lo contrario, el CORREDOR termina con comillas, y el comando "%RUNNER%" -Xmx128m ... termina con comillas dobles. El resultado es que el Programa y el Archivo se tratan como parámetros separados.


similar a esta answer pero utiliza una sub-rutina

@echo off CLS :: my code goes here set "my_variable=C:/Program Files (x86)/Microsoft Office" echo %my_variable% call :_sub_Short_Path "%my_variable%" set "my_variable=%_s_Short_Path%" echo %my_variable% :: rest of my code goes here goto EOF :_sub_Short_Path set _s_Short_Path=%~s1 EXIT /b :EOF


for %I in (.) do echo %~sI

¿Alguna forma más simple?