Ik probeer mijn Visual Studio-buildscript een .bat-bestand te laten uitvoeren dat iets belangrijks doet.
Dit is wat ik nu wil doen:
cd "F:\- Big Packets -\kitterengine\Common\" Template.bat
Maar het werkt niet.
Ik moet dit doen om het te laten werken:
cd "F:\- Big Packets -\kitterengine\Common\"
F:
Template.bat
Maar dit is vrij moeilijk toe te voegen aan het Visual Studio-script.
Hoe kan ik dit in één regel doen?
Antwoord 1, autoriteit 100%
Kan hier verwijzen naar: https://ss64.com/nt/start.html
start "" /D F:\- Big Packets -\kitterengine\Common\ /W Template.bat
Antwoord 2, autoriteit 96%
"F:\- Big Packets -\kitterengine\Common\Template.bat"
misschien voorafgegaan door call
(zie call /?
). Of Cd /d "F:\- Big Packets -\kitterengine\Common\" & Template.bat
.
CMD-spiekbriefje
-
Cmd.exe
-
Hulp vragen
-
Interpunctie
-
Bestanden een naam geven
-
Programma’s starten
-
Sleutels
CMD.exe
Het eerste dat u moet onthouden, is een manier om een computer te bedienen. Het is de manier waarop we het deden voordat WIMP (Windows, Pictogrammen, Muis, Pop-upmenu’s) gemeengoed werd. Het dankt zijn wortels aan CPM, VMS en Unix. Het werd gebruikt om programma’s te starten en bestanden te kopiëren en te verwijderen. U kunt ook de tijd en datum wijzigen.
Voor hulp bij het starten van CMD typt u cmd /?
. Je moet het beginnen met de schakelaar /k
of /c
, tenzij je het gewoon wilt typen.
Hulp vragen
Voor algemene hulp. Typ Help
in de opdrachtprompt. Typ voor elk commando help <command>
(bijv. help dir
) of <command> /?
(bijv. dir /?
).
Sommige commando’s hebben subcommando’s. Bijvoorbeeld schtasks /create /?
.
De hulp van het NET
commando is ongebruikelijk. Het typen van net use /?
is korte hulp. Typ net help use
voor volledige hulp. Hetzelfde geldt voor de root – net /?
is ook korte hulp, gebruik net help
.
Verwijzingen in de Help naar nieuw gedrag beschrijven wijzigingen van CMD in OS/2 en Windows NT4 naar de huidige CMD in Windows 2000 en later.
WMIC
is een multifunctionele opdracht. Typ wmic /?
.
Interpunctie
& seperates commands on a line.
&& executes this command only if previous command's errorlevel is 0.
|| (not used above) executes this command only if previous command's
errorlevel is NOT 0
> output to a file
>> append output to a file
< input from a file
2> Redirects command error output to the file specified. (0 is StdInput, 1 is StdOutput, and 2 is StdError)
2>&1 Redirects command error output to the same location as command output.
| output of one command into the input of another command
^ escapes any of the above, including itself, if needed to be passed
to a program
" parameters with spaces must be enclosed in quotes
+ used with copy to concatenate files. E.G. copy file1+file2 newfile
, used with copy to indicate missing parameters. This updates the files
modified date. E.G. copy /b file1,,
%variablename% a inbuilt or user set environmental variable
!variablename! a user set environmental variable expanded at execution
time, turned with SelLocal EnableDelayedExpansion command
%<number> (%1) the nth command line parameter passed to a batch file. %0
is the batchfile's name.
%* (%*) the entire command line.
%CMDCMDLINE% - expands to the original command line that invoked the
Command Processor (from set /?).
%<a letter> or %%<a letter> (%A or %%A) the variable in a for loop.
Single % sign at command prompt and double % sign in a batch file.
\\ (\\servername\sharename\folder\file.ext) access files and folders via UNC naming.
: (win.ini:streamname) accesses an alternative steam. Also separates drive from rest of path.
. (win.ini) the LAST dot in a file path separates the name from extension
. (dir .\*.txt) the current directory
.. (cd ..) the parent directory
\\?\ (\\?\c:\windows\win.ini) When a file path is prefixed with \\?\ filename checks are turned off.
Bestanden een naam geven
< > : " / \ | Reserved characters. May not be used in filenames.
Reserved names. These refer to devices eg,
copy filename con
which copies a file to the console window.
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4,
COM5, COM6, COM7, COM8, COM9, LPT1, LPT2,
LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9
CONIN$, CONOUT$, CONERR$
--------------------------------
Maximum path length 260 characters
Maximum path length (\\?\) 32,767 characters (approx - some rare characters use 2 characters of storage)
Maximum filename length 255 characters
Een programma starten
Zie start /?
en call /?
voor hulp op alle drie de manieren.
Er zijn twee soorten Windows-programma’s – console of niet-console (deze worden GUI genoemd, zelfs als ze er geen hebben). Consoleprogramma’s worden aan de huidige console gekoppeld of Windows maakt een nieuwe console. GUI-programma’s moeten expliciet hun eigen vensters maken.
Als er geen volledig pad is opgegeven, kijkt Windows binnen
-
De map van waaruit de toepassing is geladen.
-
De huidige map voor het bovenliggende proces.
-
Windows NT/2000/XP: de 32-bits Windows-systeemmap. Gebruik de
GetSystemDirectory-functie om het pad van deze map te krijgen. De
naam van deze map is System32. -
Windows NT/2000/XP: de 16-bits Windows-systeemmap. Er is geen
functie die het pad van deze map verkrijgt, maar het is
gezocht. De naam van deze map is Systeem. -
De Windows-map. Gebruik de functie GetWindowsDirectory om
het pad van deze map. -
De mappen die worden vermeld in de omgevingsvariabele PATH.
Geef een programmanaam op
Dit is de standaardmanier om een programma te starten.
c:\windows\notepad.exe
In een batchbestand wacht de batch tot het programma wordt afgesloten. Wanneer
typte de opdrachtprompt wacht niet op grafisch
programma’s om af te sluiten.
Als het programma een batchbestand is, wordt de besturing overgedragen en wordt de rest van het aanroepende batchbestand niet uitgevoerd.
Gebruik het Start-commando
Start
start programma’s op niet-standaard manieren.
start "" c:\windows\notepad.exe
Start
start een programma en wacht niet. Consoleprogramma’s starten in een nieuw venster. Het gebruik van de schakelaar /B
dwingt consoleprogramma’s naar hetzelfde venster, wat het hoofddoel van Start teniet doet.
Start gebruikt de grafische shell van Windows – hetzelfde als typen in WinKey + R (dialoogvenster Uitvoeren). Probeer
start shell:cache
Ook programmanamen die zijn geregistreerd onder HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
kunnen ook worden ingevoerd zonder een volledig pad op te geven.
Let ook op de eerste set aanhalingstekens, indien aanwezig, MOET de titel van het venster zijn.
Gebruik Oproepopdracht
Oproep wordt gebruikt om batchbestanden te starten en te wachten tot ze zijn afgesloten en verder gaan met het huidige batchbestand.
Andere bestandsnamen
Het typen van een niet-programma bestandsnaam is hetzelfde als dubbelklikken op het bestand.
Sleutels
Ctrl + Csluit een programma af zonder het consolevenster te verlaten.
Voor andere bewerkingssleutels typt u Doskey /?
.
-
^en vcommando’s terughalen
-
ESCwist de opdrachtregel
-
F7geeft opdrachtgeschiedenis weer
-
ALT+F7wist de opdrachtgeschiedenis
-
F8zoekt opdrachtgeschiedenis
-
F9selecteert een commando op nummer
-
ALT+F10wist macrodefinities
Ook niet vermeld
-
Ctrl+ <of>Verplaatst een woord tegelijk
-
Ctrl+ BackspaceVerwijdert het vorige woord
-
HomeBegin van regel
-
EindeEinde regel
-
Ctrl+ EndVerwijdert tot einde van regel
Antwoord 3, autoriteit 32%
Er zijn veel mogelijkheden om deze taak op te lossen.
1. VOER het batchbestand UIT met het volledige pad
De gemakkelijkste oplossing is om het batchbestand uit te voerenmet het volledige pad.
"F:\- Big Packets -\kitterengine\Common\Template.bat"
Zodra het einde van het batchbestand Template.bat
is bereikt, is er geen terugkeer naar het vorige script als de bovenstaande opdrachtregel zich in een *.bat- of *.cmd-bestand bevindt.
De huidige map voor het batchbestand Template.bat
is de huidige map van het huidige proces. In het geval dat Template.bat
vereist dat de directory van dit batchbestand de huidige directory is, moet het batchbestand Template.bat
na @echo off
als tweede regel de volgende opdrachtregel:
cd /D "%~dp0"
Voer in een opdrachtpromptvenster cd /?
uit om de hulp van deze opdracht te krijgen met uitleg over parameter /D
... verander naar de opgegeven map ook op een andere schijf .
Voer in een opdrachtpromptvenster call /?
uit om de hulp van deze opdracht weer te geven die ook wordt gebruikt in 2., 4. en 5. oplossing en uitleg ook %~dp0
... drive en pad van argument 0 dat de naam is van het batchbestand.
2. BEL het batchbestand met het volledige pad
Een andere oplossing is het aanroepenvan het batchbestand met het volledige pad.
call "F:\- Big Packets -\kitterengine\Common\Template.bat"
Het verschil met de eerste oplossing is dat nadat het einde van het batchbestand Template.bat
is bereikt, de batchverwerking wordt voortgezet in een batchscript dat deze opdrachtregel bevat.
Voor de huidige directory, lees hierboven.
3. Wijzig directory en RUN batchbestand met één opdrachtregel
Er zijn 3 operators voor het uitvoeren van meerdere opdrachten op één opdrachtregel: &
, &&
en ||
.
Zie voor details het antwoord op Eén regel met meerdere opdrachten met Windows-batchbestand
Ik stel voor deze taak de operator &&
voor.
cd /D "F:\- Big Packets -\kitterengine\Common" && Template.bat
Zoals bij de eerste oplossing is er geen terugkeer naar het huidige script als dit een *.bat- of *.cmd-bestand is en het wijzigen van de directory en voortzetting van de batchverwerking op Template.bat
is gelukt.
4. Wijzig directory en CALL-batchbestand met één opdrachtregel
Deze opdrachtregel verandert de directory en bij succes roepthet batchbestand op.
cd /D "F:\- Big Packets -\kitterengine\Common" && call Template.bat
Het verschil met de derde oplossing is de terugkeer naar het huidige batchscript bij het afsluiten van de verwerking van Template.bat
.
5. Wijzig directory en CALL-batchbestand met behoud van de huidige omgeving met één opdrachtregel
De vier bovenstaande oplossingen veranderen de huidige map en het is niet bekend wat Template.bat
doet met betrekking tot
- huidige map
- omgevingsvariabelen
- status van opdrachtextensies
- vertraagde uitbreidingsstatus
In het geval dat het belangrijk is om de omgeving van het huidige *.bat- of *.cmd-script ongewijzigd te laten door wat voor Template.bat
ook in de omgeving verandert, is het raadzaam om setlocal
en endlocal
.
Voer in een opdrachtpromptvenster setlocal /?
en endlocal /?
uit om de hulp van deze twee commando's te krijgen. En lees het antwoord op change directory command-cd ..werkt niet in batchbestand na npm installwaarin gedetailleerder wordt uitgelegd wat deze twee commando's doen .
setlocal & cd /D "F:\- Big Packets -\kitterengine\Common" & call Template.bat & endlocal
Nu wordt er alleen &
in plaats van &&
gebruikt omdat het hier belangrijk is dat nadat setlocal
is uitgevoerd het commando endlocal
wordt eindelijk ook uitgevoerd.
EEN NOG OPMERKING
Als batchbestand Template.bat
het commando exit
bevat zonder parameter /B
en dit commando echt wordt uitgevoerd, is het commandoproces altijd verlaten onafhankelijk van oproephiërarchie. Zorg er dus voor dat Template.bat
exit /B
of goto :EOF
bevat in plaats van alleen exit
als er exit
helemaal niet gebruikt in dit batchbestand.
Antwoord 4, autoriteit 21%
U kunt de opdracht Cmd gebruiken om het batchbestand uit te voeren.
Hier is mijn manier =>
cmd /c ""Full_Path_Of_Batch_Here.cmd" "
Meer informatie => cmd /?