Di Bash, aku bisa melakukannya EDITOR=vim command
dan command
akan dijalankan bersama EDITOR
mulai vim
, tetapi ini tidak akan memengaruhi nilai EDITOR
di shell itu sendiri. Apakah mungkin untuk melakukan ini di cmd.exe
?
Di Bash, aku bisa melakukannya EDITOR=vim command
dan command
akan dijalankan bersama EDITOR
mulai vim
, tetapi ini tidak akan memengaruhi nilai EDITOR
di shell itu sendiri. Apakah mungkin untuk melakukan ini di cmd.exe
?
Jawaban:
Catat itu cmd /C "set "EDITOR=vim" && echo %EDITOR%"
tidak akan bekerja
Tidak akan cmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Apa yang akan /V
opsi, untuk mengaktifkan ekspansi variabel lingkungan tertunda menggunakan !
sebagai pembatas.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Sebagai tercantum di bawah ini oleh maoizm , ini cmd /V /C
, tidak cmd /C /V
(yang akan tidak kerja)
Saya tidak dapat memikirkan alasan praktis apa pun yang pernah Anda inginkan sebenarnya dalam konteks satu perintah
Biasanya, Anda memerlukan ini ketika Anda harus mengganti nilai yang digunakan beberapa kali dalam baris perintah yang panjang.
Misalnya, untuk menggunakan file ke Nexus (dalam beberapa baris agar mudah dibaca):
cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
-Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
-DrepositoryId=nexus
-Durl=http://myserver/nexus/content/repositories/my-repo/"
Alih-alih harus mengganti grup, artefak (digunakan 2 kali) dan versi di baris perintah yang panjang dan kompleks, Anda dapat mengeditnya di awal dari perintah tersebut. Lebih jelas / mudah untuk memanipulasi dan mengubah nilai parameter.
'vim'
tapi 'vim '
di perintah terakhir. Tambahkan kutipan internal untuk menghindari ruang pada akhirnya.
cmd /v /c "dir file1.txt >NUL 2>&1 & echo !ERRORLEVEL! & dir file2.txt >NUL 2>&1 & echo !ERRORLEVEL!"
cmd /v/c "..."
bekerja, tapi cmd /c/v "..."
gagal - semoga bisa menghemat 15 menit
Anda dapat melakukannya di windows seperti ini tidak perlu menginstal apa pun.
cmd /C "set EDITOR=vim && set"
Anda akan melihat daftar variabel dan Anda akan melihat EDITOR = vim, sekarang jalankan "set" lagi dan itu tidak akan terdaftar.
Anda dapat melakukan banyak & amp; & amp; untuk menambahkan perintah tambahan:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT: / C keluar cmd baru segera setelah berjalan, jika Anda menghasilkan output dengan yang baru itu akan tetap terlihat di jendela induk.
Anda dapat memilih untuk menggunakan / K dalam hal ini jendela cmd baru tetap terbuka di akhir proses.
set name=foo&&echo %name%
atau set username=foo&&echo %username%
?
Anda dapat menggunakan util porting env
dari paket CoreUtils di GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
ada dalam variabel% PATH% env EDITOR=vim command
Saya telah mengetuk file batch env.cmd
yang bekerja kurang lebih seperti Linux env
perintah:-
echo off
setlocal
for %%f in (%*) do (
echo %%f|find "=" >nul:
if errorlevel 1 goto DoCmd
set %%f
shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal
Satu-satunya perbedaan adalah, karena caranya cmd
parses, penugasan lingkungan perlu dikutip, jadi perintah Anda adalah:
env "EDITOR=vim" command [up to 8 parameters]
File batch dapat diuraikan untuk menghapus pembatasan 8-parameter dengan membangun string perintah di dalam for
loop (ekspansi yang tertunda akan diperlukan).
%*
sebagai garis kedua dari belakang (yaitu, yang setelah :DoCmd
label) untuk memungkinkan perintah pengguna yang sangat lama?
%*
adalah asli daftar parameter: tidak terpengaruh oleh shift
(tidak seperti $*
di Unix).