首页 | 程式人生 | 原创下载 | 技术文档 | 留言我们 | 关于我们 |
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 |
![]()
|