Ich würde gerne wissen, mit welchen Ansätzen Sie die ausführbaren Dateien in Ihrem System verwalten. Zum Beispiel habe ich fast alles über die Befehlszeile zugänglich, aber jetzt komme ich an die Grenze der Pfadzeichenfolge, sodass ich kein Verzeichnis mehr hinzufügen kann.
Was empfehlen Sie? Vor langer Zeit habe ich versucht, softLinks der ausführbaren Dateien in einem Verzeichnis zu verwenden, das zum Pfad gehört, aber dieser Ansatz hat nicht funktioniert. Werfen Sie die "nur ausführbare Datei" auf eine bekannte Dir, hat die Probleme, dass fast jede Anwendung eine Reihe von Dateien benötigt, so dass dies auch schlecht ist. Werfen Sie die ausführbare Datei und alle seine Dateien in ein bekanntes Verzeichnis, mmm das wird funktionieren, aber die Möglichkeit, einen Konflikt im Namen der Dateien zu bekommen, ist sehr, sehr hoch. Einen HardLink erstellen? ich weiß es nicht. Was denken Sie?
Antworten:
Eine Möglichkeit, die ich mir vorstellen kann, besteht darin, andere Umgebungsvariablen zum Speichern von Teilpfaden zu verwenden. Zum Beispiel, wenn Sie haben
Dann können Sie eine neue Umgebungsvariable erstellen, z
Danach werden Ihre ursprünglichen Wege
BEARBEITEN: Eine weitere Option besteht darin, ein
bin
Verzeichnis zu erstellen , das.bat
Dateien enthält, die auf die entsprechenden.exe
Dateien verweisen .BEARBEITEN 2: In dem Kommentar von Ben Voigt zu einer anderen Antwort wird erwähnt, dass die Verwendung anderer Umgebungsvariablen, wie vorgeschlagen, die Länge möglicherweise nicht verkürzt,
%PATH%
da sie vor dem Speichern erweitert werden. Dies mag wahr sein und ich habe es nicht getestet. Eine andere Option ist jedoch die Verwendung von 8dot3-Formularen für längere Verzeichnisnamen. DiesC:\Program Files
entspricht beispielsweise normalerweiseC:\PROGRA~1
. Sie können verwendendir /x
, um die kürzeren Namen zu sehen.EDIT 3: Dieser einfache Test lässt mich glauben, dass Ben Voigt Recht hat.
Am Ende sehen Sie
hellohello
eher die Ausgabe alsbyehello
.BEARBEITEN 4: Wenn Sie sich entscheiden, Batchdateien zu verwenden, um bestimmte Pfade zu entfernen
%PATH%
, sind Sie möglicherweise besorgt darüber, wie Sie Argumente aus Ihrer Batchdatei an Ihre ausführbare Datei weitergeben können, sodass der Prozess transparent ist (dh Sie werden keinen Unterschied bemerken zwischen dem Aufrufen der Batch-Datei und dem Aufrufen der ausführbaren Datei). Ich habe nicht viel Erfahrung mit dem Schreiben von Batch-Dateien, aber das scheint gut zu funktionieren.In der Regel sollten Sie beim Ausführen von Batchdateien aus dem Internet vorsichtig sein, da Sie mit Batchdateien alles Mögliche tun können, z. B. das Formatieren Ihrer Festplatte. Wenn Sie dem obigen Code (den ich geschrieben habe) nicht vertrauen, können Sie ihn testen, indem Sie die Zeile ersetzen
mit
Idealerweise sollten Sie genau wissen, was jede Zeile tut, bevor Sie sie ausführen.
quelle
cmd
, beachten Sie, dass Sie die*
Eingabe speichern können. Geben Sie beispielsweise von root aus eindir /x pro*
. Dort sehen Sie Ihr gewünschtes Verzeichnis zusammen mit seinem 8dot3-Namen. Verwenden Sie dann,cd
um dorthin zu navigieren und den Vorgang zu wiederholen.$PATH
die sehr ähnlich wie%PATH%
in Windows funktioniert , daher bin ich mir nicht sicher, worum es Ihnen genau geht. Konventionell sind UNIX-Verzeichnisnamen in der Regel kürzer als in Windows und daher$PATH
auch kürzer.Dadurch wird Ihre Umgebungsvariable% PATH% analysiert und jedes Verzeichnis in sein Kurznamenäquivalent konvertiert. Anschließend wird alles wieder zusammengesetzt:
Nehmen Sie die Ausgabe und aktualisieren Sie die PATH-Variable in Umgebungsvariablen.
quelle
%%~sa
. Ich habe versucht, die Antwort zu aktualisieren, aber es lässt mich nicht, wenn ich nicht 6 ZeichenWenn Sie Windows Vista oder höher verwenden, können Sie einen symbolischen Link zum Ordner erstellen. beispielsweise:
mklink /d C:\pf "C:\Program Files"
würde einen Link machen,
c:\pf
wäre also deinprogram files
Ordner. Mit diesem Trick habe ich 300 Zeichen von meinem Weg entfernt.quelle
c:\Program Files
undc:\Program Files (x86)
durch die vordefinierten Variablen%ProgramFiles%
und%ProgramFiles(x86)%
tenforums.com/tutorials/… ersetzen. Diese speichern jeweils nur wenige Zeichen , aber wenn Sie WIRKLICH kurz davor stehen, PATH zu maximieren, könnte dies der Unterschied sein. In diesem Fall werde ich% pf% und% pfx% erstellen, die in die richtigen Pfade aufgelöst werden. Danke für die Idee! :)Falls jemand interessiert ist ...
Ich finde, ich brauche nie wirklich alle diese Pfade auf einmal, also erstelle ich eine Reihe von "Initialisierungs" -Batchdateien, die den Pfad entsprechend ändern.
Wenn ich beispielsweise eine C ++ - Entwicklung in Eclipse durchführen möchte, würde ich Folgendes tun:
Dies ist auch praktisch, um Konflikte zwischen gleichnamigen ausführbaren Dateien (z. B. den C ++ - und D-Compilern, die beide eine make.exe haben) zu vermeiden.
Meine Batch-Dateien sehen normalerweise so aus:
Ich finde diesen Ansatz relativ sauber und habe noch keine Probleme damit.
quelle
Ich muss mich im Allgemeinen nicht darum kümmern (ich bin nicht auf eine Pfadgrößenbeschränkung gestoßen - ich weiß nicht einmal, was das auf modernen Windows-Systemen ist), aber hier ist, was ich tun könnte, um zu vermeiden, dass das Verzeichnis eines Programms abgelegt wird der Weg:
c:\util
Verzeichnis geworfen , das sich auf dem Pfad befindetAndernfalls füge ich dem
c:\util
Verzeichnis eine einfache Cmd / Batch-Datei hinzu, die ungefähr so aussieht:Dadurch wird im Wesentlichen ein Alias für den Befehl erstellt. Es ist nicht unbedingt perfekt. Einige Programme bestehen wirklich darauf, auf dem Weg zu sein (das ist heutzutage ziemlich selten), und andere Programme, die versuchen, es aufzurufen, finden es möglicherweise nicht richtig. Aber für die meisten Anwendungen funktioniert es gut.
Aber im Allgemeinen musste ich mir keine Sorgen machen, das Hinzufügen von Verzeichnissen zum Pfad zu vermeiden.
quelle
cmd /c
jedoch, dass das Build-Skript Windows-spezifisch wird: / Ich habe dies in einer separaten Frage gestellt .Eine andere Idee: Verwenden Sie DIR / X, um die Kurznamen zu ermitteln, die für Nicht-8dot3-Dateinamen generiert wurden. Verwenden Sie diese dann in Ihrem% PATH%.
Zum Beispiel wird 'C: \ Programme' zu 'C: \ PROGRA ~ 1'.
quelle
Verwenden Sie den Anwendungspfad-Registrierungsschlüssel anstelle der Pfadvariablen für anwendungsspezifische Pfade:
http://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx
quelle
Ich habe jedes Mal einen Standard-Stream (stdin / stderr / stdout) und ein Exit-Code-PROXY-Programm (genannt Dispatcher https://github.com/131/dispatcher ) geschrieben und verwendet.
Alle CLI-Programme, die ich verwende (Node, PHP, Python, Git, SVN, Rsync, Plink ...), die ich verwende, sind tatsächlich dieselbe Exe-Datei (ca. 10 KB, die ich nur anders benenne), die ich in dieselbe eingefügt habe Verzeichnis. Eine statische Dummy-Klartextdatei führt den "Namen der Proxy-Datei für die echte Exe-Zuordnung" aus.
Der Dispatcher verwendet die Win32-API für die Prozessverwaltung auf niedriger Ebene, um absolut transparent zu sein.
Mit dieser Software habe ich in meinem PATH nur EIN zusätzliches Verzeichnis für alle Programme festgelegt, die ich verwenden könnte.
quelle
Wenn Sie einen Ordner c: \ bin erstellen, der Ihrem Pfad hinzugefügt wird, und wie Sie sagten, eine Verknüpfung herstellen, kann dies die Zeichenfolge verkürzen. Fügen Sie Systemvariablen möglicherweise eine Variable pf mit dem Wert c: \ Programme hinzu und ersetzen Sie dann c: \ Programme durch% pf% im Pfad.
Bearbeiten:
Erstellen Sie ein virtuelles Laufwerk. subst p: "c: \ Programme"
quelle
Ich folge diesen Schritten, um die Einträge überschaubar zu machen:
Verschiedene Benutzer für unterschiedliche Kombinationen der Verwendung von Softwarepaketen erstellt. Beispiel: (a) Erstellung eines Benutzerwebs zur Bereitstellung der gesamten Webentwicklungssoftware; (b) Erstellung einer Benutzerdatenbank zur Bereitstellung aller Datenbank- und Data Warehousing-Softwarepakete. Denken Sie daran, dass einige Software möglicherweise mehr als einen Eintrag erstellt. Oder manchmal teile ich dies in oracle-spezifische und MSSQL-spezifische und oracle-spezifische Benutzer auf. Ich habe MySQL / PostgreSQL, Tomcat, Wamp, Xamp alle in das Benutzerkonto-Web eingefügt.
Wenn möglich, installieren Sie gängige Pakete wie Office, Photoshop usw. als systemspezifisch für alle Benutzer und spezielle Pakete als benutzerspezifisch. Natürlich musste ich mich bei verschiedenen Benutzern anmelden und diese installieren. Möglicherweise bietet nicht jede Software diese Option. Wenn die Option "Nur für diesen Benutzer installieren" nicht verfügbar ist, installieren Sie sie für das gesamte System.
Ich vermeide die Installation von Programmen im Ordner Programmdatei (x86) oder in der Programmdatei. Ich installiere immer im Basisverzeichnis. Zum Beispiel geht MySQL 64-Bit in den Ordner "C: \ mysql64" und MySQL 32-Bit in den Ordner "C: \ mysql". Ich gehe immer davon aus, dass nur für 64-Bit-Software ein Suffix 64 hinzugefügt wird. Wenn kein Suffix vorhanden ist, handelt es sich um ein 32-Bit. Ich folge dem gleichen zu Java und anderen. Auf diese Weise wird mein Pfad kürzer, ohne "C: \ Program File (x86)". Bei einigen Programmen muss die Konfigurationsdatei möglicherweise bearbeitet werden, um anzuzeigen, wo genau sich die EXE-Datei befindet. In diesem Ordner wird nur das Programm installiert, das in "C: \ Program File (x86)" installiert werden muss. Ich erinnere mich immer daran, die Namen zu kürzen. Ich vermeide Versionsnummern wie tomcat / release / version-2.5.0.3 solche Details. Wenn ich die bekannte Version brauche, Ich erstelle eine Datei nach Namen und lege sie in den Tomcat-Ordner. Im Allgemeinen verkürzen Sie den Link so weit wie möglich.
Fügen Sie einen Stapel hinzu, um den abgekürzten Link zum Pfad zu ersetzen, wenn alle oben genannten Schritte das Windows-Limit überschritten haben.
Melden Sie sich dann bei einem benutzungsspezifischen Benutzer (mobile Anwendung oder Datenbank- / Data Warehousing oder Webentwicklung .. ..) an und führen Sie die entsprechenden Aufgaben aus.
Sie können auch virtuelle Fenster in Fenstern erstellen. Solange Sie über eine lizenzierte Betriebssystemkopie verfügen, können mehrere virtuelle Fenster mit demselben Schlüssel erstellt werden. Sie können Pakete, die für eine bestimmte Aufgabe spezifisch sind, in diesen Computer einfügen. Sie müssen jedes Mal eine separate VM starten. Einige speicherintensive Pakete wie 3D-Animationsfilmer sollten alle auf dem Hauptcomputer und nicht auf der VM installiert werden, da für die VM nur ein Teil des Arbeitsspeichers zur Verfügung steht. Es ist jedoch mühsam, jede VM zu starten.
quelle
Die oben genannten Lösungen funktionieren nur, wenn Sie Ihren Weg kürzen können. In meinem Fall war das nicht wirklich eine Option, und es war mühsam, jedes Mal, wenn ich eine Eingabeaufforderung öffnete, ein Skript ausführen zu müssen. Deshalb habe ich ein einfaches Skript geschrieben, das beim Öffnen der Eingabeaufforderung automatisch ausgeführt wird und den Inhalt einer Textdatei an Ihren Pfad anfügt.
Es gibt auch einige Kontexte, in denen das Ausführen dieses Skripts Probleme verursacht (z. B. in einer Github- oder Cygwin-Shell). Daher habe ich eine Datei hinzugefügt, die eine Liste von Pfaden enthält, bei denen die Pfadvariable nicht lautet, wenn die Eingabeaufforderung in ihnen gestartet wird Wird nicht über das Startskript geändert, das normalerweise den Pfad aktualisiert.
Und Path.txt wird ungefähr so aussehen
Während Dontsetup.txt so aussehen wird
Um dies beim Start automatisch auszuführen, öffnen Sie regedit, navigieren Sie zu HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Command Processor, klicken Sie mit der rechten Maustaste auf die rechte Maustaste und drücken Sie new -> Multi-String Value. Nennen Sie es AutoRun. Setzen Sie den Wert auf
oder wo immer Sie die Batch-Datei oben gespeichert haben.
quelle
Haben Sie es nicht versucht, aber wird es funktionieren, PATH in Teile zu teilen und sie in der endgültigen Variablen zu verbinden?
Beispiel: Nehmen wir zunächst an, Sie haben so etwas wie
PATH={LONGPATH1};{LONGPATH2};....{2048th char}....{LONGPATH_N-1};{LONGPATH_N}
Stattdessen erstellen Sie:
quelle