Unix 上 bash 命令“ls -lad”的 DOS 对应部分是什么?

i7p*_*nuz 5 linux unix command-line ms-dos cmd.exe

Unix 上bash 命令的 DOS 对应部分是什么ls -lad

Windows 上命令提示符 (cmd.exe) 上的“dir”命令通常被认为相当于 Unix/Linux 上 bash 的“ls”命令。然而,“dir”缺乏“ls”的“-d”选项的功能。“-d”选项将目录视为普通文件,并阻止显示其子文件和子目录。

ls -lad ITEM
Run Code Online (Sandbox Code Playgroud)
  1. 基本上,我需要的是给定 ITEM 的存在和类型。
  2. 至于类型,我需要知道它是目录、常规文件还是链接。
  3. 如果它是一个目录,我不希望显示它的子文件或子目录。
  4. 如果是链接,我需要知道目标。

是否有任何 DOS 命令(甚至 PowerShell 命令)具有这些功能(1)到(4)?

dir ITEM /a
attrib ITEM
Run Code Online (Sandbox Code Playgroud)

DOS 上的“attrib”命令还可以告知给定 ITEM 的存在;并且,如果它是目录,则“attrib”不会显示其子文件和子目录。然而,“attrib”无法判断它是目录、常规文件还是链接。

Dav*_*ill 5

bash 命令的 DOS 对应部分是什么ls -lad

没有直接的等价物。当然,您可以安装 Cygwin 或 Windows Subsystem for Linux 并ls -lad直接运行。

您还可以创建一个批处理文件来完成您想要的大部分操作。以下是一些提示。

检查文件是否存在:

if exist filename (
  echo filename exists
  )
Run Code Online (Sandbox Code Playgroud)

检查文件是否是目录:

if exists filename\nul (
  echo directory
) else (
  echo file
)
Run Code Online (Sandbox Code Playgroud)

检查文件是否是链接:

dir /a:l filename | find "<SYMLINK>" >nul && echo file symbolic link
Run Code Online (Sandbox Code Playgroud)

检查目录是否是链接:

dir /a:l filename | find "<SYMLINKD>" >nul && echo directory symbolic link
Run Code Online (Sandbox Code Playgroud)

要获取文件链接的目标:

for /f "usebackq delims=[] tokens=2" %i in (`dir /a:l filename ^| find "<SYMLINK">`) do @echo %i
Run Code Online (Sandbox Code Playgroud)

要获取目录链接的目标:

for /f "usebackq delims=[] tokens=2" %i in (`dir /a:l filename* ^| find "<SYMLINKD>"`) do @echo %i
Run Code Online (Sandbox Code Playgroud)

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有内容的绝佳参考。
  • dir - 显示文件和子文件夹的列表。
  • find - 在文件中搜索文本字符串并显示找到它的所有行。
  • for /f - 循环命令:针对一组文件 - 有条件地针对每个项目执行命令。
  • if - 有条件地执行命令。