উইন্ডোজ পাথের পরিবর্তে ডস পাথ পান


100

ডস উইন্ডোতে, আমি যে ডিরেক্টরিতে আছি তার পুরো ডস নাম / সংক্ষিপ্ত নাম কীভাবে পেতে পারি?

উদাহরণস্বরূপ, যদি আমি ডিরেক্টরির মধ্যে আছি C:\Program Files\Java\jdk1.6.0_22, আমি এটা সংক্ষিপ্ত নাম প্রদর্শন করাতে চান C:\PROGRA~1\Java\JDK16~1.0_2

আমি জানি রানিং dir /xআমাকে বর্তমান ডিরেক্টরিতে ফাইল / ডিরেক্টরিগুলির সংক্ষিপ্ত নাম দেবে তবে আমি বর্তমান ডিরেক্টরিটির সম্পূর্ণ পথটি সংক্ষিপ্ত নাম ফর্ম্যাটে প্রদর্শন করার উপায় খুঁজে পাইনি। আমি রুট থেকে ডিরেক্টরিটি পরিচালনা করতে চলেছি, ডিরেক্টরি অনুসারে ডিরেক্টরি, dir /xপ্রতিটিটিতে চলছে ।

আমি নিশ্চিত যে এটি করার একটি সহজ উপায় আছে?


4
এখানে এটি জিজ্ঞাসা করে ভুল কি? ডস বা এমএস-ডস দিয়ে ট্যাগ করা শত শত প্রশ্ন রয়েছে।
ক্লাইবার

সম্ভবত তারা ডস বা এমএস_ডোস সম্পর্কিত প্রশ্নগুলির প্রোগ্রামিং করছে?
পাস্কেল কুয়াক

4
ইমেল বা ভিডিওতে ট্যাগ থাকা হাজারো প্রশ্ন রয়েছে, তবে কোনও ইমেলটিতে কীভাবে কোনও ভিডিও সংযুক্ত করতে হয় তা উদাহরণস্বরূপ জিজ্ঞাসা করার জায়গাটি এখনও এটি নয় ...
গুফা

4
আমি মনে করি এটি জিজ্ঞাসা করার জন্য এটি একটি সম্পূর্ণ বৈধ প্রশ্ন এবং আমি নীচের ভোটের প্রশংসা করি না।
ক্লাইবার

12
আমি এখানে খুশি হয়েছিলাম - আমি নীচের উত্তর আমাকে সাহায্য করেছে glad
monojohnny

উত্তর:


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

কোন সহজ উপায়?


4
এটি অত্যন্ত লম্পট এবং সহায়ক।
এলগাবিতো

ঠিক আছে তবে কীভাবে এতে ডিরেক্টরিটির নাম অন্তর্ভুক্ত থাকবে?
মার্কোস

4
আমার উত্তরটি পেয়েছে: for /d %I in (*) do @echo %~sI প্রতিটি পাথ বিভাগটি সংক্ষিপ্ত, দুর্দান্ত। সমস্যাটি দীর্ঘ নামগুলির সাথে সরাসরি ছিল না, এমনকি কোনও ব্যথা হলেও স্পেসও ছিল না, তবে সবচেয়ে খারাপটি তখন আন্তর্জাতিক চরিত্রগুলিতে উপস্থিত থাকে যা কেবল আমার স্ক্রিপ্টটিকে এই ডির তালিকাটিকে ইনপুট হিসাবে গ্রহণ করে simply
মার্কোস

অসাধারণ! অত্যন্ত সহায়ক।
kulNinja

6
আপনি যদি এটি একটি ব্যাচের স্ক্রিপ্ট থেকে কল করছেন তবে আপনাকে %লক্ষণগুলি থেকে বাঁচতে হবে :for %%I in ("C:\folder with spaces") do echo %%~sI
ইগর পপভ

41

আপনি সিএমডি উইন্ডোতে নিম্নলিখিতগুলি প্রবেশ করতে পারেন:

dir <ParentDirectory> /X

<ParentDirectory>আপনার নামটি পছন্দ করতে চাইলে আইটেমটি সহ ডিরেক্টরিটির পুরো পথ দিয়ে কোথায় প্রতিস্থাপন করা হবে।

টিম্বোর জবাব হিসাবে আউটপুটটি সহজ নয় , তবে এটি নির্দিষ্ট ডিরেক্টরিতে সমস্ত আইটেমকে প্রকৃত নাম এবং (যদি আলাদা হয়) সংক্ষিপ্ত নামের সাথে তালিকাভুক্ত করে।

আপনি যদি এটি ব্যবহার করেন তবে ফাইল / ফোল্ডারের সংক্ষিপ্ত নামটি পেতে ফাইল / ফোল্ডারের পুরো পথটি দিয়ে for %I in (.) do echo %~sIপ্রতিস্থাপন করতে পারবেন .(অন্যথায় বর্তমান ফোল্ডারের সংক্ষিপ্ত নামটি ফিরে এসেছে)।

উইন্ডোজ 7 x64 এ পরীক্ষিত।


29

উইন্ডোজ ব্যাচের স্ক্রিপ্টগুলিতে, %~s1পথের পরামিতিগুলি সংক্ষিপ্ত নামে প্রসারিত করে । এই ব্যাচ ফাইলটি তৈরি করুন:

@ECHO OFF
echo %~s1

আমি আমার shortNamePath.cmdফোন করেছি এবং এটিকে কল করেছি:

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

সম্পাদনা করুন: এখানে এমন একটি সংস্করণ রয়েছে যা বর্তমান ডিরেক্টরিটি ব্যবহার করে যদি কোনও প্যারামিটার সরবরাহ না করা হয়:

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

পরামিতি ছাড়া কল করা:

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

4
ভবিষ্যতের ব্যবহারের জন্য একটি ইউটিলিটি উত্পাদন করার একটি সূক্ষ্ম উপায়। এই সমাধানের জন্য আমি আপনাকে যথেষ্ট ধন্যবাদ জানাতে পারি না। এই আদেশটি যে কোনও সময় অনায়াসে কল করা একটি আশীর্বাদ।
ইজজি হেলিয়ান্থাস

এই চতুর সমাধানের ক্ষেত্রে অন্য একটি নুব আসে: স্ক্রিপ্টটি প্রথম প্যারামিটারটি খালি কিনা তা পরীক্ষা করে। যদি তা হয় তবে স্ক্রিপ্টটি আবার চলে %0
সিঞ্জাই

11

প্রোগ্রামার হয়ে 10 মিনিটের এই উইনফর্ম প্রকল্পটি তৈরি করেছে। এটা আমার জন্য দরকারী হয়েছে। ফাইল এক্সপ্লোরারের জন্য একটি প্রসঙ্গ মেনুতে এই অ্যাপ্লিকেশনটি তৈরি করা আরও ক্লিকগুলি সংরক্ষণ করতে পারে।

10 মিনিটের অ্যাপ্লিকেশন

ফর্ম 1 সিএস:

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;
    }
}

4
এটি হ'ল কমান্ড লাইন থেকে কাজ করতে চায় এমন ব্যক্তির ওভারকিল। তবে আমি সি # প্রোগ্রামের জন্য পছন্দ করি।
এনিওলা

এপিআই এর জন্য এমএসডিএন পৃষ্ঠা: গেটশোর্টপথনাম
আমরো

7

চালান cmd.exeএবং নিম্নলিখিত কাজ:

> cd "long path name"
> command

তারপরে কমান্ড ডট কম উপস্থিত হবে এবং কেবল সংক্ষিপ্ত পথ প্রদর্শন করবে।

সূত্র


18
উইন্ডোজ 7 এর কম্যান্ড ডট কম নেই, কমপক্ষে x64 সংস্করণে নেই।
টিম্বো

4
উপরের Win7 32 বিট উপর কাজ করে - আমি সবেমাত্র এটি করেছি। তবে আপনি ঠিক বলেছেন, এটি 64 বিটে কাজ করে না (এটিও পরীক্ষিত)।
সিএসফাস

4
উইন্ডোজেও নয় 8 64 বিট
দাসুন

5

কিম্বোর উত্তরটি সাধারণ ফাইলগুলির জন্য উপযুক্ত।

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

হার্ডডিংকে এমএসডস ফাইলের নামগুলির জন্য

এর সাথে তৈরি হার্ড লিঙ্কগুলির mklink /H <link> <target>একটি এমএসডস সংক্ষিপ্ত ফাইলের নাম থাকবে না।

যদি আপনি dir /Xএবং আপনি আবিষ্কার করেন যে অনুপস্থিত সংক্ষিপ্ত নামটি অনুসরণের আশা করা উচিত:

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

সাধারণ ফাইল

এক্ষেত্রে

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

আমি যা প্রত্যাশা করেছি তা পেয়েছি

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

হার্ড লিঙ্ক ফাইল

এক্ষেত্রে

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

আমি সাধারণ এমএসডস পাথ পেয়েছি তবে সাধারণ ফাইলের নাম।

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

1

এই উত্তরের অনুরূপ তবে একটি উপ-রুটিন ব্যবহার করে

@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

1

আরও কারও প্রত্যক্ষ উত্তর হ'ল বাগটি ঠিক করা।

% স্পার্কহোম% \ বিন \ স্পার্ক-শ্রেণি 2.cmd; লাইন 54
Broken: set RUNNER="%JAVA_HOME%\bin\java"
Windows Style: set "RUNNER=%JAVA_HOME%\bin\java"

অন্যথায়, রুনার উদ্ধৃতি দিয়ে শেষ হয় এবং কমান্ডটি "%RUNNER%" -Xmx128m ... ডাবল-কোট দিয়ে শেষ হয়। ফলাফলটি হ'ল প্রোগ্রাম এবং ফাইলকে পৃথক পরামিতি হিসাবে বিবেচনা করা হয়।



1

যদি একটি ব্যাচের ফাইলের মাধ্যমে ব্যবহার করুন:

set SHORT_DIR=%~dsp0%

আপনি পরীক্ষা করতে ইকো কমান্ডটি ব্যবহার করতে পারেন:

echo %SHORT_DIR%

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.