2011-10-19 00:35:44 +0000 2011-10-19 00:35:44 +0000
83
83
Advertisement

Hoe kan ik het korte pad van een Windows directory/bestand vinden?

Advertisement

Ik moet verkorte padnamen gebruiken voor een applicatie die ik gebruik. Ik heb bijvoorbeeld C:\PROGRA~1 Ik moet verkorte padnamen gebruiken voor een applicatie die ik gebruik. Ik heb bijvoorbeeld nodig in tegenstelling totC:\Program Files. Het programma kan niet omgaan met spaties en accepteert geen geciteerde paden (bijv.“C:\Program Files”`).

Als het helpt, gebruik ik Windows 7. Ik kan toegang krijgen tot elke versie sinds XP, indien nodig.

Advertisement
Advertisement

Antwoorden (12)

84
84
84
2011-10-19 00:51:45 +0000

Start, en typ cmd in de run box. Start cmd, en gebruik cd om naar de map te gaan waarin u geïnteresseerd bent:

cd \

dan

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
42
42
42
2014-03-13 23:11:39 +0000

Maak een bat-bestand aan in een handige map en kopieer+plak het korte pad van dat pad.

U kunt command.com gewoon uitvoeren en cd opdrachten blijven uitvoeren naar uw huidige map.

In Windows batch scripts, %~s1 breidt de padparameters uit tot korte namen . Maak dit batchbestand:

@ECHO OFF
echo %~s1

Ik noemde mijn shortNamePath.cmd en noem het zo:

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

Hier is een versie die gebruik maakt van de huidige directory als er geen parameter is meegeleverd:

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

Geroepen zonder parameters:

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

Gebruik van SET en een genoemde variabele

Windows Command Prompt heeft enkele conventies voor het omgaan met variabelen met spaties in hun waarden die enigszins moeilijk te leren en te begrijpen zijn, vooral als je een Unix achtergrond hebt.   You can do

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

(met no aanhalingstekens), of

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

(let op de niet-intuïtieve plaatsing van aanhalingstekens); dan

CALL :testargs "%TESTPATH%"
        ︙

:testargs
echo %~s1
goto :eof
13
Advertisement
13
13
2017-05-22 06:42:16 +0000
Advertisement

Hier is een one liner :

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

Breakdown :

  • cmd /c - Start een nieuwe instantie van de Windows commando-interpreter, voert de opdracht uit die door een string is gespecificeerd en beëindigt dan
  • for %%parameter in (set) do opdracht - Voer een opdracht voorwaardelijk meerdere keren uit.
  • echo - Geef berichten weer op het scherm. @ symbool is hetzelfde als ECHO OFF alleen toegepast op de huidige regel.
  • %~s - Uitgebreid pad bevat alleen korte namen.

Bronnen :

9
9
9
2011-10-19 01:02:20 +0000

De “korte naam” is eigenlijk de oude DOS 8.3 naamgevingsconventie, dus alle mappen zullen de eerste 6 letters zijn, gevolgd door ~1, ervan uitgaande dat er maar één naam is die overeenkomt, bijvoorbeeld:

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

is hier de enige uitzondering

C:\ABCDEF~1 - C:\ABCDEFG I AM DIRECTORY
C:\ABCDEF~2 - C:\ABCDEFGHI Directory as well
7
Advertisement
7
7
2018-05-12 11:16:06 +0000
Advertisement

Ik vond een zeer handige manier om korte padnamen van de huidige directory (of iets anders) op te lossen als je Powershell geïnstalleerd hebt.

Gewoon open powershell in huidige dir

  • in cmd windows type powershell

  • als je map open hebt in gui kun je cmd.exe of powershell.exe direct in de adresbalk van de map typen.

Geef dan het commando

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

Herkomst van de informatie: [https://gallery.technet.microsoft.com/scriptcenter/Get-ShortName-90a49303]

4
4
4
2018-05-12 15:31:59 +0000

Net als Ivan Schwartz’s antwoord , kun je “C: Programmabestanden” vervangen door %cd% om de huidige dir:

cmd /c for %A in ("%cd%") do @echo %~sA
``` te krijgen.
0
Advertisement
0
0
2017-06-23 17:15:55 +0000
Advertisement

Als alternatief kun je dit geweldige kleine hulpmiddel genaamd PathCopyCopy

gebruiken. Met een paar klikken kun je het lange en korte pad van letterlijk elke map uit het contextuele menu krijgen, bijvoorbeeld:

Klik met de rechtermuisknop in de doelmap => Path Copy => Short Path.

Done. Het wordt gekopieerd naar uw klembord. preview

0
0
0
2019-11-03 14:38:08 +0000
@echo off
for %%i in (%*) do echo %%~si
pause

Sla het op als shortpath.bat, en sleep er dan bestanden op. Het resultaat:

C:\PROGRA~1
C:\PROGRA~2
C:\PROGRA~3
C:\Python27
C:\Users
C:\Windows
Press any key to continue . . .

Oproepen met shortpath <file path> is ook OK.

0
Advertisement
0
0
2017-12-02 17:57:42 +0000
Advertisement
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"

Dit is de eenvoudigste manier die ik heb gebruikt bij het omgaan met bestanden met spaties en deze is ook toegankelijk vanuit file explorer heeft dezelfde toegangsrechten.

0
0
0
2020-01-26 22:04:35 +0000

voor windows 10 gebruikersONE van deze oplossingen werkte voor op mijn windows 10 laptop aangezien een sleutel in het register het aanmaken van korte namen verbood.

  • Alt+r, typ regedit om de register editor te openen - ga naar HKEYLOCALMACHINESYSTEMCurrentControlSet_FileSystem
  • zoek naar de NtfsDisable8dot3NameCreationsleutel: als de waarde 0x00000001(1) is, dan maakt uw systeem geen korte naam aan voor uw map/bestand
  • in dit geval dubbelklikt u op de NtfsDisable8dot3NameCreation toets,
  • typ 0 in het gegevensveld

dit is niet met terugwerkende kracht :) Ik bedoel dat je de map/het bestand dat je nodig hebt om toegang te krijgen vanaf je oude app opnieuw moet aanmaken… misschien is er iets slims mogelijk hoewel ik dat nog niet weet.

het lijkt erop dat ze deze sleutel hebben geïntroduceerd om de werking van het bestandssysteem te versnellen.

bron microsoft https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc959352(v=technet.10)?redirectedfrom=MSDN

-1
-1
-1
2016-11-06 10:51:58 +0000

Ik heb node modules geïnstalleerd door npm install op een ketelplaat te laten draaien. Terwijl we proberen die mappen te verwijderen, laat Windows ons niet toe ze te verwijderen omdat het pad te lang is om te kunnen verwerken.

Na wat oppervlakkig onderzoek dacht ik dat het juist zou zijn mijn eigen stukje code snippet om de mappen te hernoemen van root naar leaf zodat het ook voor deze poging een overtreding zou gooien.

Het werkt voor mij. Hier volgt de code voor het C# project.

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);
        }
    }
-2
-2
-2
2016-02-10 15:18:55 +0000

Vervang gewoon de spaties door

%20

Het is de manier waarop dingen worden “vertaald”, en spaties gaan in %20.

Als je echt veel nodig hebt, gewoon pop open uw browser en typ iets als

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

Gerelateerde vragen

3
28
13
7
2
Advertisement
Advertisement