if跟for都可以在cmd終端直接套兩層 不用括號包也可以(測試環境Win11) 另外也可以自己寫and/or邏輯來搞定 set var=0 if %a%==true set /a var+=1 if %b%==true set /a var+=1 if %c%==true set /a var+=1 if %var% equ 3 echo pass 另外用if跟for會碰到一些很弔詭的問題 例如要在for下面set變數 再調用變數的話 set IP= for /f "delims=: tokens=2" %i in ('ipconfig^|findstr IPv4') do set IP=%i&echo IPaddr is %IP% 實際只會輸出兩行 IPaddr is %IP% 解法是 你要先setlocal enabledelayedexpansion 然後把do後面的 %變數% 改為 !變數! for /f "delims=: tokens=2" %i in ('ipconfig^|findstr IPv4') do set IP=%i&echo IPaddr is !IP! 這個寫法只有寫成bat執行才有效 直接在終端機執行還是會輸出兩行 IPaddr is %IP% 所以我不喜歡在if for 底下寫的太複雜
有一点没有讲到,CMD里路径只能用反斜杠(\),而PS里路径可以用反斜杠(\)也可以用正斜杠(/)。
居然啊!!感謝科普,我每次都快被引樹和路徑的斜槓搞瘋了
@@jackhsu931 直接全部用\就可以了,就不会出错了,养成习惯就好了
@@stonestone9001 因為 Linux/Mac 系統是沿襲 UNIX 的 /,Windows 的 Git bash 也是 /,是 Windows 自己改了個 \,所以用慣 / 的突然用 cmd 要切 \ 就很麻煩
Unix用户就会习惯'/',我用msys2的bash用作Windows的shell,也是有那个习惯存在的😂@@stonestone9001
写代码的话 \是转义符号 需要写成\\ ,程序运行时的时候又得用\,改成/后终于天下太平了。 不只是unix系统,各种常见协议 基本都是用/做uri分隔符。 cmd不能用/还真没注意 因为补全太难用 每次都是复制粘贴路径😅
其實 Powershell 用習慣了,也是很不錯,只是有些功能的效率真的是比不上 cmd 的命令。
我可以用 Powershell 爬站下載影片、抓漫畫、可以讀寫資料庫,可以連線 ssh,可以起個簡單的 Web Service、檔案管理、監測 Filesystem Event (Create, Change, Del...)、處理 JSON、CSV、XML、HTML 都很方便
挖靠 我沒想到他這麼頂 一直覺得他寫起來很麻煩 索性都叫AI寫
看完這影片才知道我到底在寫什麼 感覺來了XD
用nushell就好了
@@smartorder2541 nushell 是也不錯啦,但我個人偏好系統內建的
ssh跟你用的是Powershell/pwsh還是cmd沒有關係
SSH 是一個單獨的功能 可以啟用或停用
@@tomliu6116 你這大部分都跟ps沒關聯
cmd沒辦法直接理解算式
補上set /a就可以了
但只能算10進位的int32
Powershell可以執行不同進位的計算與換算
數值上限也比cmd高
cmd可以把兩個if寫在一起 不信你可以試試
再把兩個變數值換掉 看條件成不成立
set a=1&set b=2
if %a%==1 if %b%==2 echo pass
感谢分享,非常有意思的入门内容
搬不动屎山,那就再拉一泡
确实是一堆屎。我i平时大多都是使用ssh多。我都直接用wsl运行ubuntu去ssh了。
中肯
历史遗留,好有道理
得拉成自己喜欢的样子很重要
共通點:都很難用
還有:都沒什麼人用 sh 都 比這兩個好用就更不要說bash zsh 之類的了
我想 ps 現在唯一的作用應該就是重啟計算機和打開wsl了吧😂😂😂
最屎真的不是這些小東西。
而是編碼。轉碼。
曾经尝试在linux日常用powershell 失败了,写脚本的话没准会比bash zsh好用,日常交互式使用得话 感谢效率还是低了点
內容簡明易懂,感謝爬爬虾發這視頻。👍
我現在才知道bat的IF原來不能套兩層..........
上次被這個問題卡了一整天,出去散散心回來後也是想到用GOTO解決著個問題哈哈
if跟for都可以嵌套,說明不是寫了要用()包起來就可以了
Windows的if 和 for 套幾層都可以,只是要用()包起來而已,而且限定在bat內,cmd shell不行
但是DOS的好像就不行
if跟for都可以在cmd終端直接套兩層 不用括號包也可以(測試環境Win11)
另外也可以自己寫and/or邏輯來搞定
set var=0
if %a%==true set /a var+=1
if %b%==true set /a var+=1
if %c%==true set /a var+=1
if %var% equ 3 echo pass
另外用if跟for會碰到一些很弔詭的問題
例如要在for下面set變數 再調用變數的話
set IP=
for /f "delims=: tokens=2" %i in ('ipconfig^|findstr IPv4') do set IP=%i&echo IPaddr is %IP%
實際只會輸出兩行 IPaddr is %IP%
解法是
你要先setlocal enabledelayedexpansion
然後把do後面的 %變數% 改為 !變數!
for /f "delims=: tokens=2" %i in ('ipconfig^|findstr IPv4') do set IP=%i&echo IPaddr is !IP!
這個寫法只有寫成bat執行才有效
直接在終端機執行還是會輸出兩行 IPaddr is %IP%
所以我不喜歡在if for 底下寫的太複雜
直接問AI吧
或許是我淺薄
但通常問AI看看她就算給的答案不正確,你還是可以從中發現新想法
if可以嵌套啊,說明不是寫了要用()包起來嗎
缺点:
1即使在vscode环境下也调试困难
2没有global var和local var概念,只能不断去覆盖变量
3基于2到处返回闭包容易造成内存泄漏
4兼容性太差,一些新功能需要使用PowerShell7,但Windows默认的还是PowerShell5,所以你写的脚本交给同事可能并不能直接运行,还得让他安装最新的PowerShell7才行,但是PowerShell7已经推出3年了,微软为什么还不把windows默认的ps5升级为ps7?
5异常处理困难,脚本容易跑到一半崩溃而查不到具体原因
function 裡就是 local
就寫個檢查,沒裝 pwsh,就去幫她下載安裝 XD
我也遇到这个版本问题。很奇怪,Powershell 7为何不集成到Windows里。
不是有scope嗎
@@cheng-gangwang1557pwsh(Powershell 7+) 不是專門為Windows做的shell
是跨平台的東西 並且是開源的專案
Powershell 5(Powershell)是閉源的 捆綁在Windows上面
WSL屌打,Windows還是不要自己開發了,直接Default WSL就好
0:05 的開頭太有趣了
我的體驗是相反
反而有些在cmd可以執行的指令
另一個直接說不是外部指令
对,确实有一些cmd命令在shell中无法执行!
對 我也常常遇到這狀況…
其實還有兩個,第三個叫Terminal,第四個叫WSL。cmd像精簡版的sh,Terminal像bash,PowerShell像Python腳本,WSL就完全兼容Linux了。cmd.exe在搶救系統中很有用。如果還有第零個,那就是EFI shell,那也很有用。
terminal不同么,我一直以为terminal只是一个终端里面运行的不是cmd就是ps
wsl是虚拟机就完全是另一回事了
终端只是一个可以运行各种shell的软件
讲得不错,就是这发音一言难尽😂
😂
盲猜博主是北京人儿😊
天朝的英语教学,的产物
有人说要大胆的说出来,不要在意发音,能听懂就行。
又有人纠结发音,真难啊😂
@@tommye8287 双向而行,互相学习
PowerShell的執行成本也比較高...
谢谢,这么清晰明了,非常有用
4:02 我不知道现在怎么样,但是很久以前(十年以上)我尝试用PowerShell的时候,发现有些脚本(忘了是batch、cscript还是Perl)只能在Command Prompt里跑才不出错。所以并非无缝过渡,我也从此尽量只用Command Prompt.
Powershell 不支援 vbscript .vbs (cscript.exe/wscript.exe) (它的語法比較像 Classic ASP)
感謝你的介紹,完全懂了這兩者的區別了
講得很粗淺,覺得最大的問題就是每次看文件拿到一個windows的指令 cmd能用 powershell不能用,又或者powershell能用,cmd不能用,沒有像影片裡面說的一樣,cmd的指令可以在powershell裡面完全正常執行。
cmd可以呼叫Powershell
但執行完輸出結果就結束了
Powershell Get-Disk
的确讲得很粗浅。实际情况是Powershell发布很多年了,仍然不能替代cmd窗口。虽然功能上都可以替代,但使用中会发现,cmd窗口简洁方便,可以满足大多数需求。所以很多人仍然使用cmd,大爱cmd。
半像不像才是最难受的.
像mac那样直接兼容unix标准不就行了, 而不是方法名一样, 结果参数不一样.
mac不是兼容,他就是类unix系统
因为msdos和unix是同一个时代的元老级吧,msdos时unix还没有现在这样的地位?
@@mon-ou5elunix比msdos早大概10年,dos是為了cost reduction 才出來的吧
底曾设计哲学差别太大,总有部分不能完全兼容。我的感觉ps里任何东西都是对象,不像unix shell里任何东西都是text(文件也是text)
@@atussentinel 对的,底层设计决定他只能做到像
cmdlet应该是cmd的指小词吧,就跟piglet一样
請問, 什麼叫做 "更藍" ? 什麼意思?
02:47 alias 不是微軟發明的,在更早的 C Shell 就有了。
在兼容Linux 命令这一点上就有一个很大的好处就是如果你需要做跨平台操作(同时使用linux 系统或者是macos 系统的时候),那么powershell中的相同的命令就可以无缝移植到macOS的终端里面去而不需要做任何的改动。等于是可以用一套命令来跨平台操作系统,这个是很方便的。
老哥你真全
最后一个流水线太可爱了!😘
用惯了Linux 可以下去一个git bash
视频作者应该没写过批处理,批处理真正的问题在于一切皆文本,没有真正的变量。
这导致传参、获取外部输入的时候,会有很多"()^%|&符号的解析问题,不是不能解决只是要非常小心处理。
至于括号内的变量解析问题,网上教程是让你开延迟变量,这样副作用很大,应该用call%%。
管道不好用获取输出导致必须用for来小心地切割字符串。
不像shell一样有快速失败保护,导致必须得靠if errorlevel显式拦截。
以上种种,导致写起来非常难受,但统统都能解决,只是考验码农水平。
专注于业务逻辑,而不是炫技
赞赞赞!好视频!学到很多!
你還可以裝第三個:git bash
我直接拿來在windows執行.sh腳本,對於powershell有種NTR的感覺(X)
超讚... 感謝分享
這英文破到要回去國中學三年初級英文了
谢谢分享
emmm cmd 的语法不是老旧,是不规范,像你的示范,我可以这样破解
rem .bat
if %p%==1 echo if %q%==2 (echo yyyy) else echo xxxx | cmd %1
pause
结论是,ps 可以作为cmd 的上位工具,我认同,但取代还不是,在很多情况下其实cmd会比ps简单,这一点无法替代
cmd批处理命令是以DOS时代的BASIC语言为蓝本,而ps脚本命令是以VB.NET为蓝本,两者之间隔了好几代。
Nushell 也是跨平臺,不曉得以後有沒有可能取代 Linux 的 Bash
命令提示符可以直接运行命令,但是ps就要指定 Set-ExecutionPolicy -ExecutionPolicy Bypass 才能运行
工具功能越強,月須要注意安全性
不错
PowerShell最强的地方在于可以直接内嵌C#语言,直接变成编程工具。
請問版主在1:07後, 用Tab切換同時操作cmd以及powershell, 那工具是甚麼呢?
Windows Terminal,可以在 Microsoft裡搜尋 Terminal 或是終端機,它有兩個版本,一個是 preview 版,請安裝沒有 preview 的版本
还有第三个:Winget
up主,有机会能讲讲自动化网络管理脚本吗?
你想要做甚麼管理呢?
如果是透過 ssh ,需要安裝 posh-ssh module,如果是爬站或是需要 render javascript 的網站,需要裝 selenium 相關modules;如果是讀取 ldap/AD 基本上沒有問題,要讀取 MS SQL 也沒問題,讀寫 redis 需要額外安裝 module, 如果是管理 Windows Server 或是 Windows Client 可以透過 WinRM (Remote Management),建立連線 Session 之後,傳送 Powershell Script Block 去遠端電腦執行(遠端電腦要先做設定,包括允許執行powershell, firewall, 允許遠端管理)。要抓 Windows Event也沒問題
cat命令是用来连接文件,并回屏显示。
現在才知道差別,感谢分享
更“蓝”了是啥意思?“括”号中的括发音也有点意思。
powershell麻烦点在于你每个命令要知道1.输入格式,2.输出格式。换句话说作为bash编写者和阅读者你要知道要选什么命令和格式。不知道就一个一个去查。相比之下str格式全球统一,大家只需要知道str处理就可以了,知道这个写bash就够了。再复杂的需求写binary。
powershell就是一坨。Windows新的wsl不错,可以直接跑Linux terminal了。
show-command 一下就行了。
@@axpokl 谢谢这个提醒
我個人還蠻討厭 wsl 的,因為它底層是跑 Hyper-V,我不想用它,我都習慣用 VMware Workstation,想跑甚麼 Linux就自己裝就好
老師~~ 你說的很清楚 我聽得很模糊
用不到,跟它不能成為好朋友就算了。
权限更高。
看完感觉,没必要在powershell上浪费时间了。挺好
我的體驗也是相反,
有大量的CMD命令在PS不能使用。。。。
比如说呢?
其实powershell 包括Linux shell基本都不需要学习了,gpt给的答案非常准确
問到深一點的系統管理部分,其實ChatGPT 還是經常出錯,相較問 GPT Python 準確率還比 Powershell 高
大哥英文稍微练习一下,不只是口音问题,甚至单词都念错了。比如 let、child。
讲得很明白
多年的痒痒被挠到了
let 唸做 「咧」
现在有三个:cmd,power shell,终端
windows terminal 只能算是一個 command line interface program
終端只是提供介面...
不知道耶⋯單純覺得不管是 zsh 或是 bash 甚至是 sh ⋯都比 powershell 直接好上手多了⋯
學了 powershell 一下就會很煩躁⋯
我剛開始學時,也是很煩躁,想罵人,但熟悉了就好
的确很强大,可惜win不是服务器系统,还是用的人少,如果是linux,写脚本就很普遍了
像我公司的用戶端都是 Windows,又沒有 AD 環境,但只要管理者密碼一致,同時預先設定允許遠端管理,我就可以用 Powershell 來管理這些用戶端....
CMD 通用 DOS/Windows
为什么不完全继承Linux command
因为windows用户里面大部分用户以前都是windows用户。。。。。习惯问题,我就非常不喜欢linux的命令行和ps的奇葩语法,所以我现在还在用cmd,那么为啥我现在还在用cmd,就是因为奇葩微软没事就喜欢改ui,把控制面板到处藏,把各种设置到储藏,实际上从vista到win11的内核几乎没啥变化,一直在折腾uac,设置很多东西我实在找不到界面在哪,还得靠cmd和组策略
cmd和powershell不是一个东西的两个名字来的啊?😂
git bash shell啊
簡單一點,用gitbash就可以直接用Linux command操作Windows了。跑Shell script也行
PowerShell 根本就是Linux 指令語法
我只問copilot(microsoft 新一代 AI)
Very good !!
现在还能wsl😂😂😂
要浪費時間,倒不如浪費時間在bash上比較實際
中文啊中文!
如果都是浪費的話,花在哪裡其實沒什麼差別!
花費、支出、消耗、和浪費語意是不一樣的,浪費指的是完全無意義的消耗。
嗯,滄海一粟,說到底都是浪費
Command light
rd 貌似不能在powershell中运行
可以执行啊。
let, get, set发音全部读错了
老哥 你有去每個印度人頻道 留言說發音錯了嗎
@@andyjhong9308 我有幾個印度朋友,他们的英語口音比TH-cam印度博主的爛得多。印度英語口音是輔音字母混淆,如to和do幾乎同音。然而這條視頻的英語是元音混淆。元音是根基,元音一旦混淆,比如let讀成light,set讀成site,整個單詞的讀音就發生質變,即使是AI識別也大概率識別錯誤。
最难绷的就是他们看到sh就读卷舌音😅
powershell cd不了中文路径好像
可以呀
很早我就在win下用ls
这个命名集合了下划线和驼峰法所有的缺点。。。
很多東西是演進來的。
不是突然無中生有發明出來的。
總是有不滿足,然後改進。
再改進。
當時覺得很好的,開始流行。
等過了30年,可能已經有更好的了。
其實最不理解的是,PS完全兼容CMD的指令,那麼為什麼還保留CMD,如果是內部調用也ok,但在用戶層面不能做一個隱藏?微軟的作風真的太軟
Windows 可不只 cmd, pwsh, 還有 VBScript 呢! .vbs , .hta
因為要相容性,很多人還在用 cmd batch file
@@tomliu6116 不,我的意思是在用戶層面隱藏。你依然可以用cmd命令,甚至可以做命令映射,畢竟ps支援100%的cmd命令。就像mariadb是可以直接使用mysql啟動和調用的。但本質上這個mysql已經不再需要mysql本身了。至少這樣可以精簡系統大小,而且現在的win11 shift + 右鍵 還特麼做了兩個選項,一個啟動cmd一個啟動ps,純粹是在迷惑用戶,毫無意義
習慣bash之後,會覺得PS的指令又臭又長
哈哈熟悉英语口音
內容不錯 就這let一直唸成lite聽得渾身都不對勁了
那可千万别听日本人的片假名英语
rm 文件名,可以,但是 rm -rf 删除目录就不行,很恶心
請愛用 remove-Item XD
🎉
alias似乎不是windows發明的
可惜 powershell 还是很糟糕!
我晕,还真有人用PowerShell啊。直接安装git ,然后bash shell啊
power shell 超級難用, 基本都裝git windows版本, 然後用裡面的 linux shell, 好用太多了.
熟悉就好,powershell 是強迫內建的,不需要額外安裝
身為開發人員就是直接遠離 windows... 越遠越好...
英文發音可否正確一點,聽了真痛苦
没啥用,如果cmd继承Python语言不是更强大更方便?😂
那就直接用 Python 呀
😊
powershell 的命令跟老太太裹脚布一样,不知道设计师是怎么想的。。。我选择直接用 bash。
當初大概想是好記吧
但我後來都還是用 cygwin
MSYS2更好用
像歸像,不管是cmd還是powershell,作為終端機就是個垃圾,一堆快捷鍵都不能用,它很大程度上還是以圖形介面的邏輯在運作
let 不读作 赖特
哈哈哈哈哈哈,给YT用户一点小小的京式英语震撼
纸牌,蜘蛛纸牌。
既然cmd是多余的。为什么要保留呢
相容性,大家都忘了,除了 cmd, Powershell 之外,還有 .vbs VBscript(wscript/cscript)
powershell 好像還是誇平台
Windows下主場平台都沒人用的垃圾 就算跨平台了 你以為linux下會有人腦袋有病去用它嗎😂 跨平台不過是微軟的營銷話術罷了
Nushell 也是跨平臺,不曉得以後有沒有可能取代 Linux 的 Bash
@@bambooindark1 不可能 所有所謂現代化shell都是狗屎. bash shell之所以強大好用是因為可以無縫整合 毫不相干的第三方命令行程序 然後變得好用強大,所有現代化shell都對命令行程序間互相調用不友好(沒有人會去適配那些shell規定的狗屎規範 傳遞對象表格之類的) 所以最終要使用多個程序配合還是只能解析字符串 就回到了bash等原本的工作模式 既然如此那幹嘛不一開始一直就用bash
簡單來說 現代化shell 對單一簡單的工作輸出漂亮 但此外就沒用了複雜點需要所以多個程序在命令行處理 交互的還是只能傳統字符串方式處理,但是如果問題簡單單一 幹嘛不直接用圖形化程序更容易操作更漂亮 所以本喵認為所謂的現代化shell都是虛有其表沒什麼實際意義
@@飛天小企鵝-d4x 恩恩有趣的觀點,像傳統 shell 配合各個小工具們而不是像小工具們配合現代 shell
我甚至 (個人) 覺的 shell 跟我的生活沒什麼關係,也跟很多一般使用者沒什麼關係,不是直接管理系統的工作以及管理遠端伺服器的工作的話就很少用到。如果要寫超過一行以上的邏輯乾脆用其他腳本程式語言還更有效率不會用 shell。其他大部分的工作也是直接用圖形界面,不過這是對於我自己的情況是這樣
最主要是真的改不了原本那個.... th-cam.com/video/KMudkRcwjCw/w-d-xo.htmlsi=6jACSfZ2LqQRSh7X
好奇怪的英文發音
這不就是抄Unix
windows为了面向开发更友好,向linux学习
工地英语
Powershell就是反賊