首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kuanng
V2EX  ›  Windows

Windows 下有哪些程序员平时不太了解,却很重要的知识?

  •  1
     
  •   kuanng · 29 天前 · 6201 次点击
    72 条回复    2020-06-23 14:03:54 +08:00
    mopian
        1
    mopian   29 天前   ❤️ 1
    找本 Windows internals,上面全是很重要的知识
    Guys
        2
    Guys   29 天前   ❤️ 4
    命令行访问带空格的目录时,必需要加引号,不然访问不到:
    ```
    C:\>cd "Program Files\Java"
    ```
    另最新版的 Windows 系统已经帮你处理了这块.table 联想自动会加的,有时候就是用代码执行 bat 的时候需要注意这里.
    Whsiqi
        3
    Whsiqi   29 天前 via Android   ❤️ 4
    文件管理器搜索框输入 cmd
    PowerShell
    Wt
    also24
        4
    also24   29 天前   ❤️ 24
    安装 Win10 的时候,不要直接登录微软帐号,先建立离线英文名帐号,等安装完成以后再登录。
    这样可以避免 Win10 把你的用户文件夹设置成中文。

    部分不思进取的软件,在遇到用户文件夹为中文时会崩溃~
    also24
        5
    also24   29 天前
    百度输入法和 JDK 安装包有冲突,如果确实需要使用百度输入法,可以先安装 JDK 再安装百度输入法。
    Track13
        6
    Track13   29 天前 via Android   ❤️ 22
    win + shift + s 截图,不要再手机拍屏幕了。
    winterbells
        7
    winterbells   29 天前 via Android
    去年一贴子,很多人不知道怎么在当前目录打开 cmd 。。。
    zhuangzhuang1988
        8
    zhuangzhuang1988   29 天前   ❤️ 1
    不要瞎安装软件
    然后怪 windows 各种弹窗.
    litmxs
        9
    litmxs   29 天前 via Android   ❤️ 6
    Windows 中一些特殊单词不能作为文件名,例如 aux 、com1 、com2 、prn 、con 、nul,如果你发现有软件用用户文件名作为配置文件夹名称,你可以把自己用户名改成上面那些单词,软件可能就会崩溃。
    Windows 路径长度最多为 260 个字符。
    reiji
        10
    reiji   29 天前 via Android
    @also24 后悔没有早知道这个,真的被坑了好多回
    iceheart
        11
    iceheart   29 天前 via Android
    讲不出来,因为不了解
    imn1
        12
    imn1   29 天前
    如何分辨给出路径是 junction 还是目录软链
    mmdsun
        13
    mmdsun   29 天前   ❤️ 17
    上次开这种帖子的时候发现有人连按住 ctrl 可以多选文件都不知道。


    win 创建一个没后缀名的文件需要在文件名称后面紧跟一个点,比如.ignore.系统会自动识别成.ignore

    文件删除不掉提示被占用。可以通过资源监视器--cpu--关联句柄里搜索文件,然后结束进程。

    使用 PROGRA~1 代替 Program Files 。cmd 访问文件最快的办法是把文件用鼠标拖入 cmd 中。


    win 软件闪退想找错误日志? 运行里打开 eventvwr.exe


    Windows 文件历史记录可以备份文件十分好用,win 自带的搜索可以设置搜索文件的内容(包括 txt,word,excel 等文件内容)


    按住 ctrl+shift+alt 再任务管理器,任务管理器会进入精简模式,便于在系统资源不足时使用任务管理器。任务管理器卡死崩溃,按 ctrl+shift+esc 可以让崩溃的任务管理器在 10 秒内重新启动


    创建存储池,可以有效提升磁盘速度。 (若开启 Raid 0 速度快 但有数据丢失风险


    在开始菜单点关机重启时,按住 shift 可以修改系统启动模式或进入高级恢复选项。


    Win 可以设置在重要操作时要求输入密码:组策略编辑器,Windows 组件,凭据用户界面-要求输入凭据的受信任路径,点击启用.系统 UAC 需要开最高。这样安装软件,修改系统重要设置都需要验证密码。

    电脑配置不高,你使用软件比较卡顿时,可以在任务管理器修改进程优先级。正常改为:高于正常。
    imn1
        14
    imn1   29 天前   ❤️ 1
    @also24 #4
    因为 windows 路径是一种复杂的混合编码,如果不是调用 windows api 的话,还是不容易处理的
    windows 里面称呼的 unicode,主要是指 utf16le,而 ANSI 则支持本地 locale 和 ASCII,windows 路径同时支持上述情况
    有些本地 locale 双字节字符中,第二字节是含有路径排除字符的,例如 GBK “東”、“榎”等,第二字节是 5C,也就是“\”

    10 多年前“研究”过这个,说是研究,实际不懂 C 和 windows 核心,还是看资料而已
    至少 php5 时代都没能搞定 windows 路径这个难题(现在如何就不知道了),后来转了 python3,全面用 utf8 (本地 locale 也读作 utf8 ),基本无视了 windows 的路径问题,算是一种解决
    即使现在,python3+opencv 还是要小心翼翼,路径问题还是存在

    @litmxs #9
    windows 路径可以在组策略修改,突破默认限制
    另外,windows 和 linux 默认路径长度最大限制数字上看差不多,但实际差很远,windows 是字符,linux 是字节(?)
    CEBBCAT
        15
    CEBBCAT   29 天前 via Android
    重要的是少看知乎上这种看起来含金量真高,但是你好好看看 Windows 7 的自带帮助就能学到大部分,遇到问题 Google 一下就能补全的“冷门知识”
    calloc
        16
    calloc   29 天前   ❤️ 2
    资源管理器中按住 Shift,再按鼠标右键会弹出带有"在此处打开 CMD/Powershell 窗口"的菜单
    chouchoui
        17
    chouchoui   29 天前   ❤️ 2
    选中文件上按住 Shift 点鼠标右键,菜单里会多出一项复制为路径
    yukiloh
        18
    yukiloh   29 天前 via Android   ❤️ 3
    alt 双击文件夹…
    myCupOfTea
        19
    myCupOfTea   29 天前
    命令行打开 powershell $profile 文件,比如 vscode, code $profile
    设置允许执行自定义脚本 set-ExecutionPolicy RemoteSigned
    自定义 powershell 脚本,然后就可以在 $profile 对应的路径文件里修改自定义脚本呢
    分享个我自己的脚本
    function curPath {
    return (Get-Location).path
    }

    function open($path) {
    return explorer($path)
    }

    function stitle($title) {
    $host.ui.RawUI.WindowTitle = $title
    }

    function ol {
    explorer(curPath)
    }

    function olp {
    start-process powershell
    }

    function olpp {
    start-process powershell -ArgumentList "-noexit", "activate base"
    }

    function lpy($path) {
    $command = "python {0}" -f $path
    activate base
    iex $command
    }

    function olpy($path) {
    $command = "lpy {0}" -f $path
    start-process powershell -ArgumentList "-noexit", $command
    }

    function i($path = './') {
    idea64.exe $path
    }

    function gtm($commit = 'nth') {
    git commit -m"$commit"
    }

    function gta {
    git add -A
    }

    function gtp {
    git push
    }

    function gto {
    git push origin master
    }

    function gts {
    git status
    }

    function ws {
    cd "D:/zouwendi"
    }

    function ow {
    cd "C:\Users\54209\OneDrive"
    }

    function owdc {
    cd "C:\Users\54209\OneDrive\Documents\公司文档"
    }

    function Get-HashString {

    [CmdletBinding()]
    Param (
    [int] $length = 8
    )

    Begin {
    }

    Process {
    Write-Output ( -join ((0x30..0x39) + ( 0x41..0x5A) + ( 0x61..0x7A) | Get-Random -Count $length | % { [char]$_ }) )
    }
    }

    function tmp {
    cd "D:\workspace\tmp"
    }

    function ctmp {
    cd "D:\workspace\tmp"
    $path = (Get-HashString)
    mkdir $path
    cd $path
    }

    function dtmp {
    cd "D:\workspace\tmp"
    rimraf *
    }
    Cielsky
        20
    Cielsky   29 天前 via Android
    @winterbells 现在是不是没这个选项了,只有 powershell 的
    ysc3839
        21
    ysc3839   29 天前 via Android
    Unix 进程参数是字符串数组,由 shell 进行解析分割参数,然后传递字符串数组给子进程。
    Windows 进程参数只是一个字符串,由程序根据自己的规则解析成 C 语言风格的字符串数组。大多数程序的解析规则是一致的,Windows 有提供一个解析命令行参数的函数,Visual C++ 也自己实现了一个解析器。
    Tianao
        22
    Tianao   29 天前
    如何更改网络适配器的 IP 地址。

    前几天去某软件大厂的某分支机构,他们的技术员工不会给自己电脑改 IP 地址。
    winterbells
        23
    winterbells   29 天前
    @Cielsky #19 手动改,或者 DISM++ 之类的优化工具
    或者地址栏输入 cmd + enter
    Death
        24
    Death   29 天前
    @also24
    中文用户名确实是坑
    不过 win10 现在是用邮箱 username 的前几位作为默认用户名了,这一点还不错
    u823tg
        25
    u823tg   29 天前
    ctrl+shift+esc 直接打开任务管理器
    Huelse
        26
    Huelse   29 天前   ❤️ 1
    将应用固定在任务栏,win+1,win+2 可以按顺序快速启动和切换应用
    geelaw
        27
    geelaw   29 天前   ❤️ 6
    @Guys #2 错误,cd 是内部命令,你可以写 C:\>cd program files 进入 C:\Program Files,而且如果你的 program 和 files 之间有两个空格不会成功。

    @also24 #4 微软账户的默认用户名是 ID 的前五个字母,而不是用户的名字。

    @litmxs #9 文件名不能为 DOS 设备名的限制是 Win32 的而不是 Windows 的,而且通过 Win32 最大可以访问长度是 32768 的路径。

    @mmdsun #13 那个点是多余的,直接建立名字是 .txt 的文件就可以得到名字是 .txt 的文件。
    此外 Program Files 不一定是 PROGRA~1,而且 8.3 文件名可以被关掉甚至删除。

    "要求输入凭据的受信任路径" 的作用是要求输入密码之前用 Ctrl+Alt+Delete,和 UAC 是否输入密码是两个不同的问题。如果你想要管理员也输入密码,需要设置 User Account Control: Behavior of the elevantion prompt for administrators in Admin Approval Mode 为 Prompt for credentials on the secure desktop 。
    mmdsun
        28
    mmdsun   29 天前
    @geelaw 不是多余的.允许创建只有扩展名的文件是 Windows 10 19H1 和 20H1 才有的功能. 早期 windows 会提示必须输入文件名称. 像'.ignore, .config 在资源管理器不多加一个点是创建不了的.'

    要求输入凭据的受信任路径 确实是我记错了 感谢补充.
    also24
        29
    also24   29 天前
    @geelaw #27
    我不太确定 Win10 目前是否修改了策略,因为我目前重装都选择离线账户。
    之前如果登录账户,会自动创建 "C:/Users/卿 李 /" 这样的用户文件夹(没错中间还有个空格)
    also24
        30
    also24   29 天前
    @Death #24
    那看来是现在的新版本有所修改了,不过我的习惯已经养成了,毕竟一朝被蛇咬。
    Nasei
        31
    Nasei   29 天前
    @imn1 c/c++ 处理 win 路径的话,字符串内部全部用 utf8 传递,临近调用 win32 api 前转成宽字符串然后调用 W 后缀的 api 基本就可以了吧
    loading
        32
    loading   29 天前 via Android
    format d: /autotest
    这个 autotest 是不需确认,并不是只是测试。
    Guys
        33
    Guys   29 天前
    @geelaw 你发的和我发的有啥区别啊,我写 cd 是在 cmd 里面直接写的 就是为了说明这个文件夹空格问题,您别跟这抖机灵啊,抖机灵也别艾特我啊,自己再一条么,上来就是错了,您看懂我发的啥了吗?您自己看懂自己发的啥了吗?有问题赶快去检查
    bytesfold
        34
    bytesfold   29 天前
    win+tab 新建桌面,ctrl+win+←→快速切换
    winnerczwx
        35
    winnerczwx   29 天前 via iPhone
    @litmxs 踩过这个坑,枯了
    hejw19970413
        36
    hejw19970413   29 天前
    windows10 用户名一定要英文!!!!!!!!
    mengqi
        37
    mengqi   29 天前   ❤️ 1
    1. 按住 Ctrl+Shift,再单击打开可执行程序,就会通过管理员模式打开;
    2. 修改 hosts 文件时,可以 Win+R 输入 drivers 直接打开 C:\Windows\System32\drivers 目录,之后再自行打开 .\etc\hosts,比一层层目录点进去要省不少事;
    3. 有什么疑难杂症不妨打开事件查看器 Event Viewer 查看系统错误日志
    4. 任务计划管理程序( Task Scheduler )类似 Linux 下的 crontab 可以设置一些定时任务跑一些自动化脚本
    5. Windows 有局域网下的文件共享功能,开启后会启动一个 SMB 服务器,再通过 iOS 的「文件」应用作为客户端,连接服务器,就能跨系统传输文件,不需要第三方软件
    systemcall
        38
    systemcall   29 天前 via Android
    多用 win7 开始自带的搜索,可以解决很多问题
    右键点击开始,可以打开一个菜单,很多设置都在上面
    虚拟机装个原版 win7,桌面上按 f1,多看看内置帮助,写得挺好的,所以砍了
    shijingshijing
        39
    shijingshijing   29 天前
    @systemcall 哈哈,所以砍了
    geelaw
        40
    geelaw   29 天前
    @Guys #33
    我理解你的表达的意思是:cd "A B" 才能成功,cd A B 不能成功,交互式使用时 Tab 补全时会自动对带空格的目录加引号。
    我没有理解你说的在 batch 里要注意是什么意思:可能是说交互式补全会帮你加引号,batch 里要自己加;也可能是说 batch 里 cd 必须用引号。
    无论是 batch 还是交互式,cd A B 都可以成功,所以你关于 cd 需要引号处理空格的表达是错误的。

    如果你要问 cd 不需要引号为什么 Tab 补全 cd 也会带引号,这是因为 Command Prompt 比较初级,不会考虑当前命令是什么,故采用更一般的模式。

    我相信自从 Windows 支持带空格的文件名以来(也就是至少 Windows 95 以来)就不需要在 cd 里面用引号,主要是为了兼容性,比如 cd %1 这种在 Windows 95 之前写的代码(假设文件名从来都没有空格)在 Windows 95 以后仍然可以正常工作。
    不过我找不到 Windows 95 时期的参考文献了,从这篇可以看出 2012 年以来就不需要了 http://dosprompt.info/commands/cd.asp

    @mmdsun #28 理解了,这个限制只有 Explorer 有,我的意思用 Win32 访问时无此限制。
    nightwitch
        41
    nightwitch   29 天前   ❤️ 1
    中文系统的 windows 默认编码 gbk,这是写程序碰到乱码的最常见的原因。
    接上一条,由于中文系统默认 gbk,所以保存的源码,如果内部有中文注释,往往也是 gbk 编码,这会导致在默认 utf-8 的环境下无法编译,即使你的代码是合法的。

    windows 下如果看到什么地方提到了 unicode,通常不是指的 utf-8,而是 utf16 。
    Windows 下很多软件(比如老版的 visual studio)的 utf-8 往往指的是 utf-8 with BOM, 而很遗憾,其他系统的 utf-8 通常指的是 utf8 without BOM,而实际上 UTF-8 不需要 BOM 也能正确识别。

    还有众所周知的,windows 的换行符是\r\n, 而*nix 系统的是\n 。
    charlie21
        42
    charlie21   29 天前
    文件路径解析
    python 的 ntpath 模块可以帮助解析硬盘上的文件路径,无论是 win 路径 or linux / mac 路径,无视反斜杠的区别
    参考 Extract file name from path, no matter what the os/path format
    a/b/c/
    a/b/c
    \a\b\c
    https://stackoverflow.com/questions/8384737/extract-file-name-from-path-no-matter-what-the-os-path-format
    A3m0n
        43
    A3m0n   29 天前
    我想问一下,「域」是什么?
    canonlemon
        44
    canonlemon   29 天前
    在 cmd 里面删除错误输入时,按住 Ctrl + 退格,会以单词为单位删除内容
    canonlemon
        45
    canonlemon   29 天前
    在资源管理器里面,按 Ctrl + L,可以快速定位到地址栏,输入 cmd 或者 wt 可以在当前路径下打开终端
    Meltdown
        46
    Meltdown   29 天前 via Android
    用虚拟机装个 Linux,然后多用 Linux :)
    BAT
        47
    BAT   29 天前 via iPhone
    最快的关机方式不是 Alt+F4,而是桌面新建一个 bat 文件,内容是 shutdown /s /t 0,直接双击这个文件就可以关机了。
    whoami9894
        48
    whoami9894   29 天前
    echo > my_directory::$INDEX_ALLOCATION
    youla
        49
    youla   29 天前
    alt+printscreen 窗口截图 printscreen 截全屏

    截图内容在剪贴板上,对着聊天框或者画图工具或者其他图片处理软件粘贴...

    我身边好多人不知道这个。。。。。。
    youla
        50
    youla   29 天前
    @BAT 你为什么不按关机键??
    Tink
        51
    Tink   29 天前
    @Guys #2 不是吧,我记得一直可以不带引号访问啊
    jin7
        52
    jin7   28 天前
    cmd 里面 可以直接 cd c:\program files
    上面的我都会了 哈哈 除了我点赞的两条之前不知道
    MaxTan
        53
    MaxTan   28 天前
    摸鱼的时候时刻准备着 win+d
    lxml
        54
    lxml   28 天前
    @Death #24 这点也很难受,为什么就不能提供可选,因为邮箱名比如 gmail 不让你选 六个字母以下的,但微软默认又只会截断取前五个字母比如你叫 [email protected] 微软给你的用户名却叫 abcde 。唯一绕过的方法就是先建立离线账户安装完毕再登陆,微软还特别恶心的好几个确认按钮让你不要用离线账户却不提供一个修改的方式。
    tankb52
        55
    tankb52   28 天前
    ctrl+alt+方向键可以调整屏幕方向 。

    很多人不小心按错之后调不回来。
    BAT
        56
    BAT   28 天前 via iPhone
    @youla ......你赢了
    lqmrt
        57
    lqmrt   28 天前 via iPhone
    今天 get 到的,在当前目录下按文件名称首字母就能快速定位到指定的文件范围
    cz5424
        58
    cz5424   28 天前
    画界面的时候主线程不能卡住
    cz5424
        59
    cz5424   28 天前
    @charlie21 os.path.join 也可以
    neighbads
        60
    neighbads   28 天前 via Android
    @Whsiqi 按住 shift 右键,菜单中会多出 cmd 。。
    efaun
        61
    efaun   28 天前
    @tankb52 #55 这个只限于装了 intel 集显驱动的电脑,amd 并不支持
    lzk50136
        62
    lzk50136   28 天前 via Android
    alt+屏幕打印键,可以截图当前窗口
    cheng6563
        63
    cheng6563   28 天前 via Android
    设置静态 IP 吧,一堆人不会设置的
    sugarsalt
        64
    sugarsalt   28 天前
    @lqmrt #57 你甚至可以连按前两、三个字母
    CBS
        65
    CBS   28 天前
    按 F1 呼出系统以及其他软件的帮助文档
    systemcall
        66
    systemcall   28 天前
    @CBS 现在不行了,只能打开 Win10 的那个帮助页面,只有那一页了。猜测是把以前的打开帮助的那个程序修改了,直接打开那个页面。不得不说真是个**设计
    Guys
        67
    Guys   28 天前
    @geelaw table 这个单词没看见?
    charlie21
        68
    charlie21   28 天前   ❤️ 1
    win + 数字键 快速启动某个固定到任务栏的程序··

    win + q (query) 搜索
    win + w (write) 手写笔
    win + e (explorer) 资源管理器
    win + r (run) 运行

    win + a (alert) 通知中心
    win + s (search) 也是搜索
    win + d (disappear) 老板键
    win + f (feedback) 系统反馈

    win + x 等同于右键点击开始菜单
    win + c (cortana) 微软小娜
    win + v 剪切板
    win + h 语言输入
    win + m (minimal) 最小化窗口
    win + . emoji
    win + ; emoji

    win + i 设置
    win + p (project) 投影
    win + + 放大镜
    charlie21
        69
    charlie21   28 天前
    win + d (desktop) 显示桌面
    win + l (lock) 锁屏
    Win+ t (taskbar) 任务栏上固定的应用
    win + tab 虚拟桌面切换

    win + ctrl + 左右键 切换虚拟桌面
    win + shift + s 截图

    ctrl + shift + Esc 任务管理器

    win + s , 键入 powershell , ctrl + shift + Enter 以管理员权限启动
    win + e (启动任务管理器), ctrl + l (激活地址栏), 键入 powershell 打开此路径在 powershell

    ctrl + w 关闭窗口
    jackmod
        70
    jackmod   28 天前
    完整的 unicode 路径(路径长度是 32767,连 explore.exe 都不支持)。
    foo.exe "\\.\D:\当前代码页不支持的文件名"
    如果 foo.exe 入口是 wWinMain,这个参数就是 wchar_t[]。
    否则(以 932 代码页为例)会提示找不到"当前代??不支持的文件名"

    还是完整的路径,你可以创建普通规则下无效的文件名。
    "\\.\D:\COM"
    "\\.\D:\dot.."

    NTFS 数据流。
    下载文件后的「解除锁定」就是数据流的一种。这玩意也可以自己加。
    文件名格式为 "main.doc:hide.txt"
    用 PowerShell 可以批量清除数据流。
    cmd.exe 里使用 dir /r 命令可以观察数据流的存在。
    charlie21
        71
    charlie21   23 天前
    ctrl + win + Left 切换虚拟桌面
    win + Space 切换输入法
    dream4ever
        72
    dream4ever   12 天前
    用上 TotalCommander + Listary + Everything 之后,几乎就没再打开过 Windows 的资源管理器了,三大神器。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2591 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:18 · PVG 23:18 · LAX 08:18 · JFK 11:18
    ♥ Do have faith in what you're doing.