ใน 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)