如何批量列出具有特定扩展名(.json,.txt等)的文件?

时间:2016-09-04 06:43:52

标签: windows batch-file

我尝试过这段代码,但是当我尝试运行它时,当我转到该部分时,cmd窗口就会关闭。它应该列出该目录中扩展名为.json的文件。代码可能有问题吗?

 :TrackPrevious

 cd /D "%USERPROFILE%\Desktop\"
 echo.> "%USERPROFILE%\Documents\fileslist.txt"
 for %%G IN ('dir /a-d /b /s') do 
 echo %%~nxg > fileslist.txt  
 )

 for /F "delims=" %%G IN (fileslist.txt) do (
set DeviceList=%%G
 )

 echo %Devicelist%`

2 个答案:

答案 0 :(得分:1)

代码可能有问题吗?

您的代码中存在许多错误。

echo.> "%USERPROFILE%\Documents\fileslist.txt"

以上fileslist.txt与批处理文件的其余部分中使用的fileslist.txt不同,因为它是在不同的目录中创建的。可以从批处理文件中删除此行,因为它不需要。

for %%G IN ('dir /a-d /b /s') do 

以上内容在/f之后for以及该行末尾的(丢失了。

echo %%~nxg > fileslist.txt  

以上内容为g而不是G>而不是>>

echo %Devicelist%`

上面有一个尾随`可能不应该在那里。

它可能也应位于第二个for循环内,在这种情况下,延迟扩展应与!Devicelist!一起使用。

我修复了错误(见下文),但仍需要进一步的工作。

目前还不清楚您实际想要实现的目标,而且您的破碎批处理文件与您的问题标题不匹配。

test.cmd:

@echo off 
setlocal enabledelayedexpansion

:TrackPrevious

cd /D "%USERPROFILE%\Desktop\"
rem echo.> "%USERPROFILE%\Documents\fileslist.txt"

for /f %%G IN ('dir /a-d /b /s') do (
  echo %%~nxG >> fileslist.txt 
  )

for /F "delims=" %%G IN (fileslist.txt) do (
  set DeviceList=%%G
  echo !Devicelist!
 )

endlocal

进一步阅读

答案 1 :(得分:0)

您可以通过设置搜索扩展程序来尝试此解决方案:例如:如果设置如此:

SET "EXT=txt json vbs hta bat url"因此,您可以动态地将所有具有特定扩展名(txt json vbs hta bat url ...)的文件名存储在数组变量中,而无需创建filelist.txt,您可以使用Windows资源管理器浏览搜索结果:

@ECHO OFF
Title Scan a folder and store all files names in an array variables
SET "ROOT=%userprofile%\Desktop\"
SET "EXT=txt json vbs hta bat url"
SET "Count=0"
Set "LogFile=%~dp0%~n0.txt"
SETLOCAL enabledelayedexpansion
REM Iterates throw the files on this current folder and its subfolders.
REM And Populate the array with existent files in this folder and its subfolders
For %%a in (%EXT%) Do ( 
    Call :Scanning "*.%%a" & timeout /T 2 /Nobreak>nul
    FOR /f "delims=" %%f IN ('dir /b /s "%ROOT%\*.%%a"') DO (
        Call :Scanning "%%f"
        SET /a "Count+=1"
        set "list[!Count!]=%%~nxf"
        set "listpath[!Count!]=%%~dpFf"
    )
)
::***************************************************************
:Display_Results
cls & color 0B
echo wscript.echo Len("%ROOT%"^) + 20 >"%tmp%\length.vbs"
for /f %%a in ('Cscript /nologo "%tmp%\length.vbs"') do ( set "cols=%%a")
If %cols% LSS 50 set /a cols=%cols% + 15
set /a lines=%Count% + 10
Mode con cols=%cols% lines=%lines%
ECHO  **********************************************************
ECHO  Folder:"%ROOT%"
ECHO  **********************************************************
If Exist "%LogFile%" Del "%LogFile%"
rem Display array elements and save results into the LogFile
for /L %%i in (1,1,%Count%) do (
    echo [%%i] : !list[%%i]!
    echo [%%i] : !list[%%i]! -- "!listpath[%%i]!" >> "%LogFile%"     
)

( ECHO. & ECHO Total of [%EXT%] files(s^) : %Count% file(s^) )>> "%LogFile%"
ECHO(
ECHO Total of [%EXT%] files(s) : %Count% file(s)
echo(
echo    Type the number of file did you want to explore ?
set /p "Input="
For /L %%i in (1,1,%Count%) Do (
    If "%INPUT%" EQU "%%i" (
        Call :Explorer "!listpath[%%i]!"
    )
)   
Goto:Display_Results
::**************************************************************
:Scanning <file>
mode con cols=75 lines=3
Cls & Color 0E
echo(
echo Scanning for "%~1" ...
goto :eof
::*************************************************************
:Explorer <file>
explorer.exe /e,/select,"%~1"
Goto :EOF
::*************************************************************