在 Windows 命令行中实现 ls 命令

第一步,新建一个名为 ls.py 的 Python 文件,输入如下内容,并保存到 C:\Windows 目录中:

import sys

import os


def ls(*args):
    # 如果有传路径参数,则取路径参数,没传则取当前目录("." 表示当前目录)
    path = args[1] if args.__len__() > 1 else "."
    # 文件不存在,直接退出
    if not os.path.exists(path):
        return
    # 文件不是一个目录,直接退出
    if not os.path.isdir(path):
        return

    files = os.listdir(path)
    # 对文件名进行排序,方便阅读一些
    files.sort()
    print("  ".join(files))


if __name__ == "__main__":
    ls(*sys.argv)

第二步,新建一个名为 ls.bat 的批处理文件,输入如下内容,也保存到 C:\Windows 目录中:

@echo off 
rem %* 表示把批处理收到的所有参数都传递给 ls.py
python C:\Windows\ls.py %*

最后我们来看看效果:

 

java版:

---------------------------------------------------------------------------------------------------------------------------

我们也可以用其它语言来实现这个类似的脚本,比如 java,操作步骤如下:

第一步,新建一个名为 ListFiles.java 的 java 源文件,键入如下内容:

import java.io.File;
import java.util.Arrays;
import java.util.Comparator;

public class ListFiles {

    public static void main(String[] args) {
	    String path = args.length != 0? args[0] : ".";

        File file = new File(path);
	    if (!file.exists() || !file.isDirectory()) {
	        return;
        }

        File[] files = file.listFiles();
        if (null == files || files.length == 0) {
            return;
        }

        Arrays.sort(files, new Comparator<File>() {
            @Override
            public int compare(File o1, File o2) {
                return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase());
            }
        });

        String gap = "  ";
        String names = "";
        for (File f : files) {
            names += f.getName() + gap;
        }
        System.out.println(names);
    }
}

第二步,将它丢到 C:\Windows 目录下,然后在命令行把它编译成 .class 文件:

C:\Windows>javac ListFiles.java

编译成功后,在 C:\Windows 目录下将看到一个名为 ListFiles.class 的文件

第三步,编写 ls.bat,并把它也移动到 C:\Windows 目录:

@echo off 
java -cp C:\Windows ListFiles %*

执行以下看看效果:

 

可以看到,跟 python 版一样的。一般情况我们推荐用 python,不用编译,修改更便捷。

一个小窍门:java 其实也是可以不编译直接运行的,我们只要在启动 java 时使用 --source <N> 参数就可以了。例如,本例中我们可以把它修改为:

java --source 14 C:\Windows\ListFiles.java

--source 后面的 14 表示用 jdk 14去编译和执行源文件。其它可用值有:7、8、9、10、11、12、13、14。

需要注意的是, --source 命令虽然可以不用编译就直接执行 .java 文件,但它并不是像其它解释型语言那样直接解释执行,其实它是把 .java 加载到内存中后在内存里先执行了编译,然后再交给虚拟机的解释器去运行的。正是因此,所以我们在 --source 参数去直接执行 .java 文件时会明显的感觉比编译后去执行 .class 文件要慢

注意:以上示例需要先安装 Python 或 JDK 哈

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值