首页 | 程式人生 | 原创下载 | 技术文档 | 留言我们 | 关于我们

Windows中用批处理实现Linux的ls功能

作者: phanrider        2005-05-27

@REM ==========================================================
@REM =
@REM = Windows's ls,it's running in cmd /v:on
@REM = Writer: phanrider
@REM = 2005-05-23
@REM =
@REM ==========================================================


@echo off

:setlocal

setlocal
set filename1=tempzhl$.001
set filename2=tempzhl$.002
set filename3=tempzhl$.003
set filename4=tempzhl$.004
set find_filename=findzhl$.red
set temp_file=tmplmj$.red
set fc_filename=fclmj$.red
set user_flag=r-x
set g_flag=r-x
set o_flag=r-x



rem ==========================================================
rem =
rem = get directory or file
rem =
rem ==========================================================

:begin
dir /q %1 > %filename1% 2>nul
find ":" %filename1% > %filename2% 2>nul
cd > %fc_filename% 2>nul
for /f "tokens=*" %%Z in (%fc_filename%) do set temp_path1=%%Z
erase %fc_filename% >nul 2>&1

cd %1 > %fc_filename% 2>nul
if %errorlevel%==1 set fileflag=1
if %errorlevel%==0 set fileflag=0
if %fileflag%==0 (
set temp_path=%1
)

erase %fc_filename% >nul 2>&1
cd %temp_path1% >nul 2>&1


rem ==========================================================
rem =
rem = get language setting
rem =
rem ==========================================================

if "%LANG%"=="zh_CN" ( find "个" %filename1% > %find_filename% 2>nul
for /f "skip=2 tokens=1,2,3*" %%A in (%find_filename%) do (
if not exist %temp_file% ( set filenum=%%A
set filesum=%%C
)
echo %%A > %temp_file% 2>nul
if exist %temp_file% ( set dirnum=%%A
set disksize=%%C
)
)
) else (goto :end)

erase %temp_file% >nul 2>&1



rem ==========================================================
rem =
rem = list directory or files
rem =
rem ==========================================================

echo total %filesum% diskfree %disksize%

@for /f "skip=3 tokens=1,2,3,4*" %%j in (%filename2%) do (
if %fileflag%==1 (cacls "%1" > %filename3% 2>nul) else (cacls "%temp_path%\%%n" > %filename3% 2>nul
)
rem type %filename3%
set user_flag=r-x
set g_flag=r-x
set o_flag=r-x

type %filename3% | findstr "%%m:(OI)(CI)W %%m:(OI)W %%m:(CI)W %%m:W" 1>nul 2>&1
if !errorlevel!==0 set user_flag=-w-
type %filename3% | findstr "%%m:(OI)(CI)F %%m:(OI)F %%m:(CI)F %%m:F" 1>nul 2>&1
if !errorlevel!==0 set user_flag=rwx



type %filename3% | findstr "Users:(OI)(CI)W Users:(OI)W Users:(CI)W Users:W" 1>nul 2>&1
if !errorlevel!==0 set g_flag=-w-
type %filename3% | findstr "Users:(OI)(CI)F Users:(OI)F Users:(CI)F Users:F" 1>nul 2>&1
if !errorlevel!==0 set g_flag=rwx

type %filename3% | findstr "Everyone:(OI)(CI)W Everyone:(OI)W Everyone:(CI)W Everyone:W" 1>nul 2>&1
if !errorlevel!==0 set o_flag=-w-
type %filename3% | findstr "Everyone:(OI)(CI)F Everyone:(OI)F Everyone:(CI)F Everyone:F" 1>nul 2>&1
if !errorlevel!==0 set o_flag=rwx


if "%%l"=="<DIR>" (
@echo d!user_flag!!g_flag!!o_flag! %%m %%j %%k %%n
) else (
@echo -!user_flag!!g_flag!!o_flag! %%m %%l %%j %%k %%n
)
)

)



rem ==========================================================
rem =
rem = clear tempfiles
rem =
rem ==========================================================


:end
erase %filename4% >nul 2>&1
erase %filename3% >nul 2>&1
erase %filename1% >nul 2>&1
erase %filename2% >nul 2>&1
erase %find_filename% >nul 2>&1
echo.
endlocal

REM END


→返回←

红蜻蜓工作室版权所有
Copyright © 1999-2025 Reddragonfly & Studio All Rights Reserved.
如有任何问题及建议请留言红蜻蜓工作室