参考:
https://9to5answer.com/what-characters-are-forbidden-in-windows-and-linux-directory-names
https://www.codenong.com/1976007/#码农翻译快照#Windows和Linux目录名中禁止使用哪些字符?
https://ispacesoft.com/64457.html#各种系统路径和文件名长度的最大限制
https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation#最大路径长度限制
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/18e63b13-ba43-4f5f-a5b7-11e871b71f14#8.3文件名规则
https://www.autohotkey.com/boards/viewtopic.php?t=86131#@iPhilip  drive letter + :\ + 243 folder name characters + \ + 12 file name characters【大小写敏感】Windows:    noLinux/Unix:yesMacOS:      yesMacOSX:     no【同级目录下允许存在同名文件与目录】Windows:     no万事总有例外,如: Windows 11 桌面隐藏两个同名文件 "Desktop.ini"使用其它 Hacker 手段也可能创建同名文件。【文件名禁止字符】这里讲的是正常使用情况下的禁止规则,排除使用其它 Hacker 手段添加的禁止字符。Windows:1.文件路径(包括驱动器号、目录名、文件名)不区分大小写。2.被禁可打印ASCII字符是:\ / : * ? " < > |\ (backslash,可作为路径分隔符,将一个目录名与路径中的另一个目录名称分开)/ (forward slash): (colon - sometimes works, but is actually NTFS Alternate Data Streams,作为驱动器号与目录路径的分隔符)* (asterisk)? (question mark)" (double quote)< (less than)> (greater than)| (vertical bar or pipe)3.不可打印字符如果您的数据来自允许不可打印字符的源,那么还需要检查更多。0-31 (ASCII control characters,控制字符)4.保留文件名(包含小写)AUX, CON, CONIN$, CONOUT$, NUL, PRNCOM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9但加上任意的文件扩展名则符合规则,例如,LPT1.txt。只加一个点号和/或空格可不行,如: CON. 或 CON . 【自测 Win10】 CONIN $,CONOUT $   CONIN(或CONOUT)+空格+$ 是合法文件名。CONIN$, CONOUT$     也被保留。试图创建则提示是“无效的文件句柄”。"CONIN$" 和 "CONOUT$" 也是保留字。与 "CON" 不同,它们允许以读写方式访问控制台输入和屏幕缓冲区。在 Windows 8 之前,只有基本文件名是保留的。从 Windows 8 开始,底层的控制台 IPC 被重新设计为使用设备驱动程序,因此这两个名称现在被通用地作为 DOS 设备处理,与 "NUL" 等相同。这意味着它们可以用于本地设备路径,例如 "\\.\CONIN$" 和 "\\?\CONOUT$" ,且还意味着 API 假装这些名称在每个现有目录中都 '存在' 。例如,"C:\Temp\CONOUT$" 引用控制台输出。【DOS设备名称】请注意,保留的 DOS 设备名称和文件名以点或空格结尾的规则是在将 DOS 路径转换为本地 NT 路径时由运行时库应用的。如果路径以 "\\?\" 本地设备前缀开头,则跳过这个规范化步骤,除了用 NT 的 "\??\" 设备前缀替换 "\\?\" 。这个前缀指示对象管理器在登录会话和全局 DOS 设备目录中搜索一个符号链接,该符号链接指向一个本地 NT 设备,通常是 "\Device" 目录中的一个设备对象。【LPT1...9】使用 Cygwin,您可以轻松创建 lpt1 和 lpt1.txt 等类似设备名。【不可打印字符】把 TAB 等字符粘贴进 Cygwin Bash, 可以用它在 Windows 下创建含有特殊字符的文件名。ls -l 查看显示为 '$'\t 这其实是一个字符,并非两个字符。5.文件名不能以空格开头或结尾Windows 自动去除开头和结尾的连续空格。6.文件名不能以英文点号结尾- Windows 自动去除结尾的连续点号 ‘.’- 使用句点作为路径中的目录部分来表示当前目录,例如 ".\\temp.txt"- 使用两个连续的句点 (..) 作为路径中的目录 组件 来表示父目录,例如 "..\\temp.txt"因此包括但不止下列文件名均不合法:.........." ...." 这里要去除双引号,只为表示前面有一个空格".... " 这里要去除双引号,只为表示后面有一个空格... . ...7.其他规则DOS中, 不允许使用 - (hyphen, 连字符)FAT、exFAT 格式禁止 ^  "CONIN$", "CONOUT$"8.文件路径长度限制- 不开启长文件名Windows 默认不开启长文件名,系统路径的限制长度是 260,文件名的长度最大不超过 255.在头文件 stdlib.h 中定义#define MAX_PATH 260实际的文件名必须少于 260,因为完整路径(如 C:\Program Files\filename.txt)都包含在此字符数值中。另外末尾要保留一个字节 (GBK) 或两个字节 (UNICODE) 给结束符 (null, 即 \0)。- 开启长文件名Windows 开启长文件名时,系统路径的限制长度是 32767,文件名的长度最大不超过 255.从 Windows 10 version 1607 build 14352 之后,就可以设置启用 enable NTFS long paths 来打破路径最大长度是 260 的限制。开启的方法是:打开注册表,修改[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]"LongPathsEnabled"=dword:00000001- 在命令文件时,windows会截断文件名超出长度的部分。- 在脚本中,文件路径首尾各一个双引号不算在长度内。- 关于一个汉字占用两个字节,可能与 GBK(GB2312等) 和 UNICODE(UTF-8等) 编码有关。 一个中文字符,GBK: 1; UNICODE: 2 个字节。- UNC(Universal Naming Convention),即“通用命名约定”。如果文件路径采用 UNC 规则, 一些前缀不用作路径本身的一部分。如:\\?\UNC\server\share其中“server”是计算机的名称,“share”是共享文件夹的名称。这些前缀不用作路径本身的一部分。它们指示路径应以最少的修改传递到系统,这意味着您不能使用正斜杠来表示路径分隔符,也不能使用句点来表示当前目录,也不能使用双点来表示父目录。由于不能将“\\?\”前缀与相对路径一起使用,因此相对路径始终限制为总共 MAX_PATH(包括 \0) 个字符。- 另外,文件名命名规则有些需要继承 DOS 8.3 命名规则,参考【@iPhilip 实测】 参考文章末尾的讲解。【我的实测 Windows 11 中文简体】文件完整路径最多包含 247 个字符,可能 Windows 8.3 API 有关,下面引自 MSDN 原话:使用 Windows  file I/O API  创建目录时,指定的路径不能太长,以至于无法追加 8.3 文件名(即目录名不能超过 MAX_PATH 减 12)。合法最长例子: C:\2441111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111C:\35111111111111111111111111111111111\2081111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111C:\35111111111111111111111111111111111\204111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.txtC:\31中文11111111111111111111111111111\204111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.txtC:\31中文11111111111111111111111111111\20611111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.txt注:上面文件完整路径是 3+33+1+206 个字符+4=247, 说明一个中文文字只占一个字符。把最长命名的文件移动到比当前目录长度更长的目录路径中,不会报错,不会修改文件名。这时再读取这个文件时会出错,但可使用短文件名路径访问,如:type "C:\244111~1\111111~1"Linux/Unix:1.被禁可打印ASCII字符是/ (forward slash)注: Linux/Unix文件名具有控制字符是合法的,对用户来说,处理这些文件可能是一场噩梦。。最好文件名中不要包含 : ? @ # $&()|; ‘’“”<>等字符,另外 空格符,制表符和退格符也不建议使用。避免使用 + - 和. 作为文件名的第一个字符(Linux下以.开头的文件是隐藏文件)。2.不可打印字符\0 (NULL byte)3.文件路径长度限制limits.h 头文件里面有针对 NAME 和 PATH 的最大长度限制:#define NAME_MAX         255 /* # chars in a file name */#define PATH_MAX        4096    /* # chars in a path name including nul */完整路径: 4096 字节; 文件名: 255 字节。MacOS HFS+:1.被禁可打印ASCII字符是:: (colon 英文冒号被禁, 中文冒号:可以)2.其他规则. (dot 英文点号不能放在文件名开头, 中文句号‘。’可以)3.文件路径长度限制syslimits.h 头文件里面有针对 NAME 和 PATH 的最大长度限制:#define NAME_MAX         255  /* # max bytes in a file name */#define PATH_MAX        1024    /* # max bytes in pathname */完整路径: 1024 字节; 文件名: 255 字节。:: ---------------------------------------------------------------------------------------------------------------------https://www.autohotkey.com/boards/viewtopic.php?t=86131
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/18e63b13-ba43-4f5f-a5b7-11e871b71f14【@iPhilip 实测】I did some tests with the script below and I can make the following observations:
我用下面的脚本做了一些测试,我可以做出以下观察:The maximum number of characters in a path is 259 (MAX_PATH - 1).
路径中的最大字符数为 259 (MAX_PATH - 1)。The maximum number of characters in a file name is 255, e.g. drive letter + :\ + 255 file name characters.
文件名中的最大字符数为 255,例如驱动器号 + :\ + 255 个文件名字符。The maximum number of characters in a folder name is 244, e.g. drive letter + :\ + 244 folder name characters.
文件夹名称中的最大字符数为 244,例如驱动器号 + :\ + 244 个文件夹名称字符。When combined with a backlash and a file name the maximum number of characters in a folder name is 243, e.g. drive letter + :\ + 243 folder name characters + \ + 12 file name characters.
The 12 characters represent the number of characters in an 8.3 file name. This is consistent with the following statement from the Maximum Path Length Limitation page:
当与反斜杠和文件名结合使用时,文件夹名称中的最大字符数为 243,例如驱动器号 + :\ + 243 个文件夹名称字符 + \ + 12 个文件名字符。
这 12 个字符表示 8.3 文件名中的字符数。 8 个基本文件名字符 + . + 最多 3 个扩展名字符。The base filename MUST be 1-8 characters in length and MUST NOT contain a "." period character.
基本文件名的长度必须为 1-8 个字符,并且不得包含“.”句点字符。The filename extension, if present, MUST be 1-3 characters in length and MUST NOT contain a "." period character.
文件扩展名(如果存在)长度必须为 1-3 个字符,并且不得包含“.”句点字符。这与“最大路径长度限制”页中的以下语句一致:When using an API to create a directory, the specified path cannot be so long that you cannot append an 8.3 file name (that is, the directory name cannot exceed MAX_PATH minus 12).
使用 API 创建目录时,指定的路径不能太长,以至于无法追加 8.3 文件名(即目录名不能超过 MAX_PATH 减 12)。Here is the script:  这是脚本:#NoEnv; Admin priviledges are required to create files and/or folders in the root directoryfull_command_line := DllCall("GetCommandLine", "str")if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{try{if A_IsCompiledRun *RunAs "%A_ScriptFullPath%" /restartelseRun *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"}ExitApp
}MAX_PATH := 260; Test of longest path in the script directoryLoop {MaxChars := MAX_PATH - A_IndexLongPath := A_ScriptDir "\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoChars - 4LongPath .= "x"LongPath .= ".txt"FileAppend, , % LongPathif FileExist(LongPath)break
}
MsgBox % "The file path has " StrLen(LongPath) " characters.`nThe file name has " StrLen(LongPath) - NoChars " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileDelete, % LongPath; Test of the longest filename in the C:\ folderLoop {MaxChars := MAX_PATH - A_IndexLongPath := "C:\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoChars - 4LongPath .= "x"LongPath .= ".txt"FileAppend, , % LongPathif FileExist(LongPath)break
}
MsgBox % "The file path has " StrLen(LongPath) " characters.`nThe file name has " StrLen(LongPath) - NoChars " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileDelete, % LongPath; Test of the longest folder in the C:\ folderLoop {MaxChars := MAX_PATH - A_IndexLongPath := "C:\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoCharsLongPath .= "x"FileCreateDir, % LongPathif FileExist(LongPath)break
}
MsgBox % "The folder path has " StrLen(LongPath) " characters.`nThe folder name has " StrLen(LongPath) - NoChars " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileRemoveDir, % LongPath; Test of the longest folder + 8.3 file name in the C:\ folderLoop {MaxChars := MAX_PATH - A_IndexLongPath := "C:\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoChars - 13  ; StrLen("\") + 8 + 1 + 3 (8.3 file) = 13LongPath .= "x"LongPath .= "\"FileCreateDir, % LongPathFolder := LongPathLongPath .= "12345678.123"FileAppend, , % LongPathif FileExist(LongPath)break
}
MsgBox % "The folder path has " StrLen(LongPath) " characters.`nThe folder name has " StrLen(Folder) - NoChars - 1 " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileDelete, % LongPath
FileRemoveDir, % FolderExitAppThus, the statement in the Long Paths section of the documentation is partially correct in that a single file name,
but not a folder name, has a maximum length of 255 characters.
I modified my original post to reflect the above observations.
因此,文档的“长路径”部分中的语句部分正确,因为单个文件名(而不是文件夹名称)的最大长度为 255 个字符。
我修改了我的原始帖子以反映上述观察结果。:: ---------------------------------------------------------------------------------------------------------------------

目录

【参考:】

【大小写敏感】

【同级目录下允许存在同名文件与目录】

【文件名禁止字符】

Windows:

Linux/Unix:

MacOS HFS+:

【@iPhilip 实测】

Here is the script:  这是脚本:


【参考:】

https://9to5answer.com/what-characters-are-forbidden-in-windows-and-linux-directory-names
https://www.codenong.com/1976007/#码农翻译快照#Windows和Linux目录名中禁止使用哪些字符?
https://ispacesoft.com/64457.html#各种系统路径和文件名长度的最大限制
https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation#最大路径长度限制
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/18e63b13-ba43-4f5f-a5b7-11e871b71f14#8.3文件名规则
https://www.autohotkey.com/boards/viewtopic.php?t=86131#@iPhilip  drive letter + :\ + 243 folder name characters + \ + 12 file name characters

【大小写敏感】

Windows:    no
 Linux/Unix:yes
 MacOS:      yes
 MacOSX:     no

【同级目录下允许存在同名文件与目录】

Windows:     no
              万事总有例外,如: Windows 11 桌面隐藏两个同名文件 "Desktop.ini"
              使用其它 Hacker 手段也可能创建同名文件。

【文件名禁止字符】

这里讲的是正常使用情况下的禁止规则,排除使用其它 Hacker 手段添加的禁止字符。

Windows:

1.文件路径(包括驱动器号、目录名、文件名)不区分大小写。
  2.被禁可打印ASCII字符是:

    \ / : * ? " < > |
    \ (backslash,可作为路径分隔符,将一个目录名与路径中的另一个目录名称分开)
    / (forward slash)
    : (colon - sometimes works, but is actually NTFS Alternate Data Streams,作为驱动器号与目录路径的分隔符)
    * (asterisk)
    ? (question mark)
    " (double quote)
    < (less than)
    > (greater than)
    | (vertical bar or pipe)
  3.不可打印字符
    如果您的数据来自允许不可打印字符的源,那么还需要检查更多。
    0-31 (ASCII control characters,控制字符)
  4.保留文件名(包含小写)
    AUX, CON, CONIN$, CONOUT$, NUL, PRN
    COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
    LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
    但加上任意的文件扩展名则符合规则,例如,LPT1.txt。
    只加一个点号和/或空格可不行,如: CON. 或 CON . 
    【自测 Win10】 
        CONIN $,CONOUT $   CONIN(或CONOUT)+空格+$ 是合法文件名。
        CONIN$, CONOUT$     也被保留。试图创建则提示是“无效的文件句柄”。
        "CONIN$" 和 "CONOUT$" 也是保留字。
        与 "CON" 不同,它们允许以读写方式访问控制台输入和屏幕缓冲区。
        在 Windows 8 之前,只有基本文件名是保留的。
        从 Windows 8 开始,底层的控制台 IPC 被重新设计为使用设备驱动程序,
        因此这两个名称现在被通用地作为 DOS 设备处理,与 "NUL" 等相同。
        这意味着它们可以用于本地设备路径,例如 "\\.\CONIN$" 和 "\\?\CONOUT$" ,
        且还意味着 API 假装这些名称在每个现有目录中都 '存在' 。例如,"C:\Temp\CONOUT$" 引用控制台输出。
    【DOS设备名称】
        请注意,保留的 DOS 设备名称和文件名以点或空格结尾的规则是在将 DOS 路径转换为本地 NT 路径时由运行时库应用的。
        如果路径以 "\\?\" 本地设备前缀开头,则跳过这个规范化步骤,除了用 NT 的 "\??\" 设备前缀替换 "\\?\" 。
        这个前缀指示对象管理器在登录会话和全局 DOS 设备目录中搜索一个符号链接,
        该符号链接指向一个本地 NT 设备,通常是 "\Device" 目录中的一个设备对象。
    【LPT1...9】
        使用 Cygwin,您可以轻松创建 lpt1 和 lpt1.txt 等类似设备名。
    【不可打印字符】
        把 TAB 等字符粘贴进 Cygwin Bash, 可以用它在 Windows 下创建含有特殊字符的文件名。
        ls -l 查看显示为 '$'\t 这其实是一个字符,并非两个字符。
  5.文件名不能以空格开头或结尾
    Windows 自动去除开头和结尾的连续空格。
  6.文件名不能以英文点号结尾
    - Windows 自动去除结尾的连续点号 ‘.’
    - 使用句点作为路径中的目录部分来表示当前目录,例如 ".\\temp.txt"
    - 使用两个连续的句点 (..) 作为路径中的目录 组件 来表示父目录,例如 "..\\temp.txt"
      因此包括但不止下列文件名均不合法:
      .
      ..
      ...
      ....
      " ...." 这里要去除双引号,只为表示前面有一个空格
      ".... " 这里要去除双引号,只为表示后面有一个空格
      ... . ...
  7.其他规则
    DOS中, 不允许使用 - (hyphen, 连字符)
    FAT、exFAT 格式禁止 ^  "CONIN$", "CONOUT$"
  8.文件路径长度限制
    - 不开启长文件名
      Windows 默认不开启长文件名,系统路径的限制长度是 260,文件名的长度最大不超过 255.
      在头文件 stdlib.h 中定义
          #define MAX_PATH 260
      实际的文件名必须少于 260,因为完整路径(如 C:\Program Files\filename.txt)都包含在此字符数值中。
      另外末尾要保留一个字节 (GBK) 或两个字节 (UNICODE) 给结束符 (null, 即 \0)。
    - 开启长文件名
      Windows 开启长文件名时,系统路径的限制长度是 32767,文件名的长度最大不超过 255.
      从 Windows 10 version 1607 build 14352 之后,就可以设置启用 enable NTFS long paths 来打破路径最大长度是 260 的限制。
      开启的方法是:打开注册表,修改
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
      "LongPathsEnabled"=dword:00000001
    - 在命令文件时,windows会截断文件名超出长度的部分。
    - 在脚本中,文件路径首尾各一个双引号不算在长度内。
    - 关于一个汉字占用两个字节,
可能与 GBK(GB2312等) 和 UNICODE(UTF-8等) 编码有关。 一个中文字符,GBK: 1; UNICODE: 2 个字节。
    - UNC(Universal Naming Convention),即“通用命名约定”。
      如果文件路径采用 UNC 规则, 一些前缀不用作路径本身的一部分。如:
          \\?\UNC\server\share
      其中“server”是计算机的名称,“share”是共享文件夹的名称。这些前缀不用作路径本身的一部分。它们指示路径应以最少的修改传递到系统,
      这意味着您不能使用正斜杠来表示路径分隔符,也不能使用句点来表示当前目录,也不能使用双点来表示父目录。
      由于不能将“\\?\”前缀与相对路径一起使用,因此相对路径始终限制为总共 MAX_PATH(包括 \0) 个字符。
    - 另外,文件名命名规则有些需要继承 DOS 8.3 命名规则,参考
        【@iPhilip 实测】 参考文章末尾的讲解。
    【我的实测 Windows 11 中文简体】
        文件完整路径最多包含 247 个字符,可能 Windows 8.3 API 有关,下面引自 MSDN 原话:
        使用 Windows  file I/O API  创建目录时,指定的路径不能太长,以至于无法追加 8.3 文件名(即目录名不能超过 MAX_PATH 减 12)。
        合法最长例子: 
        C:\2441111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
        C:\35111111111111111111111111111111111\2081111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
        C:\35111111111111111111111111111111111\204111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.txt
        C:\31中文11111111111111111111111111111\204111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.txt
        C:\31中文11111111111111111111111111111\20611111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.txt
        注:上面文件完整路径是 3+33+1+206 个字符+4=247, 说明一个中文文字只占一个字符。
            把最长命名的文件移动到比当前目录长度更长的目录路径中,不会报错,不会修改文件名。
            这时再读取这个文件时会出错,但可使用短文件名路径访问,如:
            type "C:\244111~1\111111~1"

 Linux/Unix:

1.被禁可打印ASCII字符是
    / (forward slash)
    注: Linux/Unix文件名具有控制字符是合法的,对用户来说,处理这些文件可能是一场噩梦。。
         最好文件名中不要包含 : ? @ # $&()|; ‘’“”<>等字符,另外 空格符,制表符和退格符也不建议使用。
         避免使用 + - 和. 作为文件名的第一个字符(Linux下以.开头的文件是隐藏文件)。
  2.不可打印字符
    \0 (NULL byte)
  3.文件路径长度限制
    limits.h 头文件里面有针对 NAME 和 PATH 的最大长度限制:
        #define NAME_MAX         255    /* # chars in a file name */
        #define PATH_MAX        4096    /* # chars in a path name including nul */
    完整路径: 4096 字节; 文件名: 255 字节。

MacOS HFS+:

  1.被禁可打印ASCII字符是:
    : (colon 英文冒号被禁, 中文冒号:可以)
  2.其他规则
    . (dot 英文点号不能放在文件名开头, 中文句号‘。’可以)
  3.文件路径长度限制
    syslimits.h 头文件里面有针对 NAME 和 PATH 的最大长度限制:
        #define NAME_MAX         255    /* # max bytes in a file name */
        #define PATH_MAX        1024    /* # max bytes in pathname */
    完整路径: 1024 字节; 文件名: 255 字节。

:: ---------------------------------------------------------------------------------------------------------------------

https://www.autohotkey.com/boards/viewtopic.php?t=86131
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/18e63b13-ba43-4f5f-a5b7-11e871b71f14

【@iPhilip 实测】

I did some tests with the script below and I can make the following observations:
我用下面的脚本做了一些测试,我可以做出以下观察:

The maximum number of characters in a path is 259 (MAX_PATH - 1).
路径中的最大字符数为 259 (MAX_PATH - 1)。

The maximum number of characters in a file name is 255, e.g. drive letter + :\ + 255 file name characters.
文件名中的最大字符数为 255,例如驱动器号 + :\ + 255 个文件名字符。

The maximum number of characters in a folder name is 244, e.g. drive letter + :\ + 244 folder name characters.
文件夹名称中的最大字符数为 244,例如驱动器号 + :\ + 244 个文件夹名称字符。

When combined with a backlash and a file name the maximum number of characters in a folder name is 243, e.g. drive letter + :\ + 243 folder name characters + \ + 12 file name characters. 
The 12 characters represent the number of characters in an 8.3 file name. This is consistent with the following statement from the Maximum Path Length Limitation page:
当与反斜杠和文件名结合使用时,文件夹名称中的最大字符数为 243,例如驱动器号 + :\ + 243 个文件夹名称字符 + \ + 12 个文件名字符。
这 12 个字符表示 8.3 文件名中的字符数。 8 个基本文件名字符 + . + 最多 3 个扩展名字符。

The base filename MUST be 1-8 characters in length and MUST NOT contain a "." period character.
基本文件名的长度必须为 1-8 个字符,并且不得包含“.”句点字符。

The filename extension, if present, MUST be 1-3 characters in length and MUST NOT contain a "." period character.
文件扩展名(如果存在)长度必须为 1-3 个字符,并且不得包含“.”句点字符。

这与“最大路径长度限制”页中的以下语句一致:

When using an API to create a directory, the specified path cannot be so long that you cannot append an 8.3 file name (that is, the directory name cannot exceed MAX_PATH minus 12).
使用 API 创建目录时,指定的路径不能太长,以至于无法追加 8.3 文件名(即目录名不能超过 MAX_PATH 减 12)。

Here is the script:  这是脚本:

#NoEnv; Admin priviledges are required to create files and/or folders in the root directoryfull_command_line := DllCall("GetCommandLine", "str")if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{try{if A_IsCompiledRun *RunAs "%A_ScriptFullPath%" /restartelseRun *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"}ExitApp
}MAX_PATH := 260; Test of longest path in the script directoryLoop {MaxChars := MAX_PATH - A_IndexLongPath := A_ScriptDir "\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoChars - 4LongPath .= "x"LongPath .= ".txt"FileAppend, , % LongPathif FileExist(LongPath)break
}
MsgBox % "The file path has " StrLen(LongPath) " characters.`nThe file name has " StrLen(LongPath) - NoChars " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileDelete, % LongPath; Test of the longest filename in the C:\ folderLoop {MaxChars := MAX_PATH - A_IndexLongPath := "C:\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoChars - 4LongPath .= "x"LongPath .= ".txt"FileAppend, , % LongPathif FileExist(LongPath)break
}
MsgBox % "The file path has " StrLen(LongPath) " characters.`nThe file name has " StrLen(LongPath) - NoChars " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileDelete, % LongPath; Test of the longest folder in the C:\ folderLoop {MaxChars := MAX_PATH - A_IndexLongPath := "C:\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoCharsLongPath .= "x"FileCreateDir, % LongPathif FileExist(LongPath)break
}
MsgBox % "The folder path has " StrLen(LongPath) " characters.`nThe folder name has " StrLen(LongPath) - NoChars " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileRemoveDir, % LongPath; Test of the longest folder + 8.3 file name in the C:\ folderLoop {MaxChars := MAX_PATH - A_IndexLongPath := "C:\"NoChars := StrLen(LongPath)Loop, % MaxChars - NoChars - 13  ; StrLen("\") + 8 + 1 + 3 (8.3 file) = 13LongPath .= "x"LongPath .= "\"FileCreateDir, % LongPathFolder := LongPathLongPath .= "12345678.123"FileAppend, , % LongPathif FileExist(LongPath)break
}
MsgBox % "The folder path has " StrLen(LongPath) " characters.`nThe folder name has " StrLen(Folder) - NoChars - 1 " characters.`nThe first 25 characters are: " SubStr(LongPath, 1, 25) "`nThe last 25 characters are: " SubStr(LongPath, -24) "`n`nClick OK to delete it."
FileDelete, % LongPath
FileRemoveDir, % FolderExitApp

Thus, the statement in the Long Paths section of the documentation is partially correct in that a single file name, 
but not a folder name, has a maximum length of 255 characters. 
I modified my original post to reflect the above observations.
因此,文档的“长路径”部分中的语句部分正确,因为单个文件名(而不是文件夹名称)的最大长度为 255 个字符。
我修改了我的原始帖子以反映上述观察结果。
    
:: ---------------------------------------------------------------------------------------------------------------------

window、linux、mac 文件路径禁止字符, 路径长度【全网总结】相关推荐

  1. 简单介绍Linux进程文件路径的获取方法

    Linux进程文件路径在哪里才能找得到呢,有时会让Linux系统管理员费些心思,这里小编说一个简单的案例,相信会让不少管理员有所收获,帮助轻松获得想要的Linux进程文件路径,完成指定任务. 进入/p ...

  2. linux history文件路径,Linux、Unix常用命令(文件和目录相关)

    mkdir dirname 建立子目录. 注意:用户不能在一个不存在的目录中建立子目录. mkdir data 在当前目录下建立子目录 data mkdir /usr/data 在/usr/目录下建立 ...

  3. linux防火墙文件路径,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件

    虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop ...

  4. python 中文件路径到底怎么写 + 获取mac文件路径快捷键!!

    目录 1 MAC路径与Windows路径问题 2 绝对路径和相对路径概念 3 macOS获取文件绝对路径的快捷键为: 1 MAC路径与Windows路径问题 几乎所有计算机在文件夹名称间使用的都是正斜 ...

  5. linux 文件名的长度不得超过,linux对文件路径和文件名长度的限制

    linux对文件夹以及文件名的长度做了限制,以ubuntu为例,描述文件路径为:/usr/include/linux/limits.h #ifndef _LINUX_LIMITS_H #define ...

  6. docker部署服务,本地文件路径正常,linux服务器文件路径找不到的小坑

    还是想每天坚持写点什么,也是菜的出奇,只能写一些很表层的东西.今天就记录一下工作中遇到docker部署到linux服务器的一个小坑. 项目中有个预览功能,要求返回给前台base64的图片,但是ftp上 ...

  7. linux 防火墙文件路径,linux防火墙设置

    手机评站网今天精心准备的是<linux防火墙设置>,下面是详解! linux如何关闭防火墙 一.Linux下开启/关闭防火墙命令 1) 永久性生效,重启后不会复原 开启: chkconfi ...

  8. Python读取grib方法总结(window/Linux/Mac)

    grib数据是以另一种带压缩功能的自描述文件,和netcdf相比,它没有什么额外的优点,但有诸多使用上的不便.grib使用不便的原因有两个: 该数据的标准定义严格且狭窄,仅有少数部门(或单位.或应用场 ...

  9. Linux查看文件路径

    Linux下有两个命令可以查看命令或者文件所在的位置 1.which which 用来查看当前要执行的命令所在的路径 which - shows the full path of (shell) co ...

最新文章

  1. java的移植性_详细介绍JAVA的可移植性
  2. python学习 第七篇 sql优化
  3. 项目管理工具到底应该为谁服务?
  4. wsdd文件是怎么生成的_Axis WSDD文件参考文档
  5. 转:[大数据竞赛]协同过滤在这个问题上是否work
  6. c语言中oxb0常量是什么意思,C语言练习库V1.0
  7. Java 查询Word是否存在关键字,并保留word路径到txt
  8. 舆情分析系统技术解决方案及作用
  9. js增量更新算法研究
  10. Smart3D飞控地方坐标系
  11. 生容易,活容易,生活不容易!
  12. 华为新版Datacom认证介绍
  13. VLDB论文解读:阿里云超大规模实时分析型数据库AnalyticDB
  14. 2021年起重机械指挥考试题及起重机械指挥模拟考试
  15. 数电实验(一)利用与非门设计四舍五入判别电路
  16. H3C 防火墙混合实验 新华三杯拆解
  17. [Geek Challenge 2022] crypto部分
  18. 手机即时通服务器地址修改,手机即时通服务器地址修改
  19. 采购注意,公司事业部质量成本分析案例
  20. 跳槽——找马时,我被驴发现了 1

热门文章

  1. 共享美容院营销新概念与盈利模式
  2. 【经验】如何学习插画的构图?插画构图的基本原则!
  3. 如何定制allure报告的logo
  4. 树莓派安装FISCO-BCOS
  5. [乡土民间故事_徐苟三传奇]第四四回_赵员外苕吃假香肠
  6. 利用本地安全策略全面禁止360等特定厂商软件的安装与运行
  7. order by使用索引列排序时会失效吗?
  8. Ubound Lbound,数组上下边界 将二维数组处理后写入新数组,并粘贴到单元格中。
  9. 对token(令牌)的理解
  10. 快速查看电脑内存型号方法