ใน Bash ฉันสามารถทำได้EDITOR=vim command
และcommand
จะEDITOR
ตั้งค่าเป็นvim
แต่จะไม่ส่งผลกระทบต่อมูลค่าของEDITOR
เชลล์ เป็นไปได้ไหมที่จะทำเช่นนี้cmd.exe
?
ใน Bash ฉันสามารถทำได้EDITOR=vim command
และcommand
จะEDITOR
ตั้งค่าเป็นvim
แต่จะไม่ส่งผลกระทบต่อมูลค่าของEDITOR
เชลล์ เป็นไปได้ไหมที่จะทำเช่นนี้cmd.exe
?
คำตอบ:
โปรดทราบว่าcmd /C "set "EDITOR=vim" && echo %EDITOR%"
จะไม่ทำงาน
หรือจะcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
สิ่งที่จะเป็น/V
ตัวเลือกในการเปิดใช้งานการขยายตัวของตัวแปรสภาพแวดล้อมล่าช้าโดยใช้!
เป็นตัวคั่น
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
ในฐานะที่ระบุไว้ด้านล่างโดยmaoizmมันเป็นcmd /V /C
, ไม่ cmd /C /V
(ซึ่งจะไม่ทำงาน)
ฉันไม่สามารถนึกถึงเหตุผลเชิงปฏิบัติใด ๆ ที่คุณต้องการได้ในบริบทของคำสั่งเดียว
โดยทั่วไปคุณต้องการสิ่งนี้เมื่อคุณต้องแทนที่ค่าที่ใช้หลายครั้งในบรรทัดคำสั่งยาว
ตัวอย่างเช่นในการปรับใช้ไฟล์กับ Nexus (ในหลายบรรทัดเพื่อให้สามารถอ่านได้):
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/"
แทนที่จะต้องเปลี่ยนกลุ่มสิ่งประดิษฐ์ (ใช้ 2 ครั้ง) และเวอร์ชันในบรรทัดคำสั่งที่ยาวและซับซ้อนคุณสามารถแก้ไขได้ที่จุดเริ่มต้นของคำสั่งที่กล่าวไว้ มีความชัดเจน / ง่ายกว่าในการจัดการและเปลี่ยนค่าพารามิเตอร์
'vim'
แต่'vim '
ในคำสั่งสุดท้าย เพิ่มเครื่องหมายคำพูดภายในเพื่อหลีกเลี่ยงพื้นที่ในท้ายที่สุด
cmd /v/c "..."
ทำงานได้ แต่cmd /c/v "..."
ล้มเหลว - หวังว่าจะช่วยให้คุณประหยัดได้ 15 นาที
คุณสามารถทำได้ใน windows เช่นนี้ไม่จำเป็นต้องติดตั้งอะไร
cmd /C "set EDITOR=vim && set"
คุณจะเห็นรายการตัวแปรและคุณจะเห็น EDITOR = vim ตอนนี้เรียกใช้ "set" อีกครั้งและมันจะไม่ปรากฏในรายการ
คุณสามารถทำหลาย && เพื่อเพิ่มคำสั่งเพิ่มเติม:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
แก้ไข: / C ออกจาก cmd ใหม่ทันทีหลังจากทำงานหากคุณสร้างเอาต์พุตด้วยอันใหม่มันจะยังคงมองเห็นได้ในหน้าต่างหลัก
คุณสามารถเลือกที่จะใช้ / K ในกรณีที่หน้าต่าง cmd ใหม่ยังคงเปิดอยู่เมื่อสิ้นสุดการรัน
set name=foo&&echo %name%
หรือset username=foo&&echo %username%
?
คุณสามารถใช้ ported util env
จากแพ็คเกจ CoreUtils ใน GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
ในตัวแปร% PATH%env EDITOR=vim command
ฉันเคาะไฟล์แบตช์env.cmd
ซึ่งทำงานได้มากกว่าหรือน้อยกว่าเช่นenv
คำสั่งLinux : -
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
ความแตกต่างเพียงอย่างเดียวคือเนื่องจากวิธีcmd
แจงการมอบหมายสภาพแวดล้อมจำเป็นต้องอ้างถึงดังนั้นคำสั่งของคุณจะเป็น:
env "EDITOR=vim" command [up to 8 parameters]
ไฟล์แบตช์สามารถทำรายละเอียดเพื่อลบข้อ จำกัด 8 พารามิเตอร์โดยการสร้างสตริงคำสั่งภายในfor
ลูป (จำเป็นต้องมีการขยายตัวล่าช้า)
%*
เป็นบรรทัดสุดท้าย (เช่นอันถัดจาก:DoCmd
เลเบล) เพื่ออนุญาตให้ใช้คำสั่งผู้ใช้ที่ยาวมาก?
%*
เป็นรายการพารามิเตอร์ดั้งเดิม : มันไม่ได้รับผลกระทบจากshift
(ต่างจาก$*
Unix)