Windowsディレクトリ/ファイルの短いパスを見つけるにはどうすればよいですか?


73

使用しているアプリケーションの短縮パス名を使用する必要があります。たとえば、私が必要C:\PROGRA~1\とするのはC:\Program Files。プログラムはスペースを処理できず、引用符で囲まれたパス(例:)を受け入れません"C:\Program Files"

うまくいけば、Windows 7を使用しています。必要に応じて、XP以降のすべてのバージョンにアクセスできます。

回答:


77

開始cmdし、実行ボックスに入力します。cmdを起動し、使用cdして目的のフォルダーにアクセスします。

cd \

それから

dir /x

C:\>dir /x

13/10/2011  09:14 AM    <DIR>          DOCUME~1     Documents and Settings
13/10/2011  09:05 AM    <DIR>          PROGRA~1     Program Files

パスのすべてのサブフォルダーに対してこれを行いますか?
エンドリス

@endolith /sスイッチはサブフォルダーの再帰を行います
ポール、

1
8.3パス全体をどのように表示しますか?
エンドリス

4
@PaulこれはWin10では機能しないようです。何か案は?
AHungerArtist

3
@AHungerArtist短いファイル名は必ずしも存在するわけではありません。それらの作成をオフにすることができます。
Hipponax43

37

便利なディレクトリにbatファイルを作成し、そのパスから短いパスをコピーして貼り付けることができます。

実行して、現在のディレクトリに対してもコマンドを実行command.comし続けることができcdます。

Windowsバッチスクリプトで、%~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

SETと名前付き変数を使用する

Windowsコマンドプロンプトには、値にスペースが含まれる変数を処理するためのいくつかの規則があり、特にUnixのバックグラウンドがある場合は、学習と理解がやや困難です。できるよ

SET TESTPATH=c:\Program Files (x86)\Android\android-sdk

引用符なし)、または

SET "TESTPATH=c:\Program Files (x86)\Android\android-sdk"

(引用符の直感的でない配置に注意してください); それから

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof

6
本当に役立つ、答えとしてマークされるべきです!
-lucaferrario

ありがとう!SETコマンドを使用して実行できますか?SET AAA = Cのように:これまでのショートバージョンに真ん中\内の別のスペースを\何\プログラムファイル\
Li3ro

@ Li3ro SET変数コマンドの方法を理解できませんでしたが、かなり近づきました。答えの一番下にそれを見ることができますが、少し修正が必要です。私はバッチスクリプトプログラミングに興味がないので、方法がわかりません。
–SSポーク

この方法では実行できません。これにはforループが必要です
-Li3ro

これは、受け入れられた答えよりも便利です
-EvilTeach

8

ここに1つのライナーがあります:

cmd /c for %A in ("C:\Program Files") do @echo %~sA

内訳

  • cmd /c -Windowsコマンドインタープリターの新しいインスタンスを起動し、stringで指定されたコマンドを実行してから終了します
  • for %%parameter in (set) do command-コマンドを条件付きで数回実行します。
  • echo-メッセージを画面に表示します。@symbolは、ECHO OFF現在の行にのみ適用されるものと同じです。
  • %~s -拡張パスには短い名前のみが含まれます。

ソース


1
いいね!!! 「C:\ Program Files」をに置き換えることができます。現在のディレクトリの短い名前を取得するには
アンドリューSteitz

1
いつ/なぜ必要cmd /cですか?コマンドプロンプトウィンドウを使用している場合は、コマンドを入力するだけfor %A in ("C:\Program Files") do @echo %~sAで、[実行]ダイアログボックスに入力すると、結果が表示されなくなります。
スコット

2
うまくできました。@Scottが指摘しているように、cmd /cから実行する場合は必要ありませんcmd。あなたはからそれが必要なのですPowerShellのが、その後、あなたもする必要があります'...'後にトークン-enclose /ccmd /c 'for %f in ("C:\Program Files") do @echo %~sf'
mklement0

8

「短縮名」は実際には古いDOS 8.3の命名規則であるため、すべてのディレクトリは最初の6文字で、その後に~1一致する名前が1つしかないと仮定します。次に例を示します。

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\BCDEFG~1    - C:\BCDEFGHIJKL M Another Directory

ここが唯一の例外です

C:\ABCDEF~1    - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2    - C:\ABCDEFGHI Directory as well

6
違います。特に韓国語などのアジア文字を使用している場合は、使用される文字が少なくなることがあります。
アラファンギオン

1
「例外」は、定期的にあなたがのうちどちらを知る必要があるかもしれませんすべてのWindows 64ビットのインストール、中に発生し、特にとして-私は質問のポイントである「例外」の場合ではこれはどちら見つけると仮定Program FilesしてProgram Files (x86)いるPROGRA~1とされ1つはPROGRA~2です。ポールの答えはその問題を解決します。
ORマッパー14

2
同じ文字で始まるファイルが非常に多いため、そのうち4つ(...~4)がハッシュのように見えます。たとえばABxxxx~1、xは16進数でしたが、これは読みにくいです。
Sirap

2
ユーザーが長い名前を見て、短い名前を論理的に把握できることを提案していますか?それは真実ではない。私が作成するとABCDEFGH-CAT、それは短い名前になりABCDEF~1ます。次に作成するとABCDEFGH-DOG、短い名前になりABCDEF~2ます。私はその後、削除した場合ABCDEFGH-CATABCDEFGH-DOGまだ短い名前を持っていますABCDEF~2。長い名前を見るだけではわかりません。
スコット

前述のように、短縮名は最初の6文字にプラス記号を付ける必要はありません~1Windowsが短い名前を生成するために使用する規則を参照してください。また、を使用して短い名前を手動で設定することもできるfsutilため、2つの名前にはまったく関係がない場合があります。単独のハードやソフトリンクしてみましょう
phuclv

4

Powershellがインストールされている場合、現在のディレクトリ(またはその他)の短いパス名を解決する非常に便利な方法を見つけました。

現在のディレクトリでPowerShellを開くだけです

  • cmd windows type powershell

  • guiでフォルダーを開いている場合は、フォルダーのアドレスバーにcmd.exeまたはpowershell.exeを直接入力できます。

その後、コマンドを与える

(New-Object -ComObject Scripting.FileSystemObject).GetFolder(".").ShortPath

情報の起源:[ https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]


3

Ivan Schwartzの答えと同様に、「C:\ Program Files」を置き換えて%cd%現在のディレクトリを取得できます。

cmd /c for %A in ("%cd%") do @echo %~sA  

0

または、PathCopyCopyと呼ばれるこの素晴らしい小さなツールを使用できます

数回クリックするだけで、コンテキストメニューから文字通り任意のフォルダーの長いパスと短いパスを取得できます。例:

宛先フォルダーを右クリック=> Path Copy => Short Path。

できた クリップボードにコピーされます。

プレビュー


0

npm installボイラープレートで実行してノードモジュールをインストールしました。これらのフォルダーを削除しようとしている間、パスが長すぎて処理できないため、Windowsではフォルダーを削除できません。

いくつかの浅い調査の後、この試みでも違反例外をスローするように、フォルダーをルートからリーフに名前変更するのは正しいコードスニペットだと思いました。

わたしにはできる。以下は、C#プロジェクトのコードです。

    public static int directoryCounterIndex = 0;
    public static void Main(string[] args)
    {
        string dirPath = @"D:\Studies\MeanStack\a\nodem";
        RenameDirectories(dirPath);
    }

    private static void RenameDirectories(string dirPath)
    {
        directoryCounterIndex += 1;
        var newPath = Path.GetDirectoryName(dirPath) + Path.DirectorySeparatorChar + directoryCounterIndex.ToString();
        Directory.Move(dirPath, newPath);
        var subDirectories = Directory.GetDirectories(newPath);
        foreach (var subDirectory in subDirectories)
        {
            RenameDirectories(subDirectory);
        }
    }

3
質問を注意深く読んでください。あなたの答えは元の質問には答えませ
DavidPostill

0
C:\Users\abcd>subst z: "c:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

C:\Users\abcd>subst
Z:\: => C:\Program Files (x86)\Microsoft Office365 Tools\Microsoft Visual Studio 14.0"

これは、スペースを含むファイルを扱うときに使用した最も簡単な方法であり、ファイルエクスプローラからもアクセスできますが、すべて同じアクセス権限があります。


-2

スペースを

%20

物事が「翻訳」される方法であり、スペースは%20に入ります。

本当に必要な場合は、ブラウザを開いて次のように入力するだけです

test ";($#< and find the word test, and see that the space is %20 and so on...

私はあなたが正しいとは思わない。これは肯定的な結果を生み出しませんif exist C:\Program%20Files\ (echo exists)
。– kayleeFrye_onDeck

3
あなたは完全に異なるものについて話している。主なポイントは、ディレクトリ名とファイル名が8文字に切り捨てられることです。ブラウザはそれとは何の関係もありません。
ダウィッドフェレンツィーロゴザン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.