Batch file 如何";cd";一步一步进入文本文件中的所有文件夹?
更新 以下是我的完整代码:Batch file 如何";cd";一步一步进入文本文件中的所有文件夹?,batch-file,cmd,Batch File,Cmd,更新 以下是我的完整代码: cd "C:\Users" DIR /A:D /S /B > "%appdata%\folder_overview.txt" type "%appdata%\folder_overview.txt" | findstr /v AppData | findstr /v All.Users | findstr /v Public >> "%appdata%\newfolder.txt" move "%appdata%\newfolder.txt"
cd "C:\Users"
DIR /A:D /S /B > "%appdata%\folder_overview.txt"
type "%appdata%\folder_overview.txt" | findstr /v AppData | findstr /v All.Users | findstr /v Public >> "%appdata%\newfolder.txt"
move "%appdata%\newfolder.txt" "%appdata%\folder_overview.txt"
:repeatuntilfilesizezero
set LINES=0
for /f "delims==" %%I in (%appdata%\folder_overview.txt) do (
set /a LINES=LINES+1
)
set /a LINES=LINES-1
more +%LINES% < "%appdata%\folder_overview.txt" >> "%appdata%\last_folder.txt"
Setlocal EnableDelayedExpansion
set content=
for /f "delims=" %%i in (%appdata%\last_folder.txt) do set content=!content! %%i
pause
cd %content%
type "%appdata%\folder_overview.txt" | findstr /v "%content%" >> "%appdata%\newfolder.txt"
move "%appdata%\newfolder.txt" "%appdata%\folder_overview.txt"
DEL "%appdata%\last_folder.txt"
FOR %%S IN (%appdata%\folder_overview.txt) DO set size=%%~zS
echo %size%
IF %size% gtr 0 echo goto :repeatuntilfilesizezero
IF %size% equ 0 echo "null"
pause
cd“C:\Users”
目录/A:D/S/B>%appdata%\folder\u overview.txt
键入“%appdata%\folder\u overview.txt”| findstr/v appdata | findstr/v All.Users | findstr/v Public>>%appdata%\newfolder.txt
移动“%appdata%\newfolder.txt”%appdata%\folder\u overview.txt“
:repeatuntilfilesizezero
设置行数=0
对于(%appdata%\folder\u overview.txt)中的/f“delims==”%%I,请执行以下操作(
设置/a行=行+1
)
设置/a行=行-1
更多+%LINES%<%appdata%\folder\u overview.txt“>>%appdata%\last\u folder.txt”
Setlocal EnableDelayedExpansion
设置内容=
对于(%appdata%\last\u folder.txt)中的/f“delims=“%%i”,请设置内容=!内容!%%我
暂停
cd%含量%
键入“%appdata%\folder\u overview.txt”| findstr/v“%content%”>>“%appdata%\newfolder.txt”
移动“%appdata%\newfolder.txt”%appdata%\folder\u overview.txt“
删除“%appdata%\last\u folder.txt”
对于(%appdata%\folder\u overview.txt)中的%%S,请设置大小=%%~zS
回显%size%
如果%size%gtr 0回声转到:repeatuntilfilesizezero
如果%size%eq 0回显“null”
暂停
我注意到最后一行是空行是完全值得的。
我只想要以下几点:
- 列出所有文件夹
- “cd”到“folder_overview.txt”中的最后一个文件夹,并从文件中删除最后一行
- 检查“folder_overview.txt”是否为空 ->如果不是空的,只需转到标签“:repeatuntilfilesizezero” ->如果为空,则转到退出
Hannir要检索文本文件中非空的最后一行,不需要计算行数,只需使用
more
跳过一行即可。只需将for/F
循环与变量赋值一起使用,这样变量最后保留最后一行:
> "%APPDATA%\last_folder.txt" (
for /F usebackq^ delims^=^ eol^= %%L in ("%APPDATA%\folder_overview.txt") do (
set "LINE=%%L"
)
setlocal EnableDelayedExpansion
echo(!LINE!
endlocal
)
这里使用延迟变量扩展来避免最后一行中的一些特殊字符出现问题,如^
,&
,(
和)
如果文件不包含重复的行,可以使用以下代码删除最后一行:
> "%APPDATA%\folder_overwiew.txt" findstr /L /X /V /G:"%APPDATA%\last_folder.txt" "%APPDATA%\folder_overwiew.txt"
如果文件可能包含重复项,则可以使用以下代码段:
set "LINE="
> "%APPDATA%\folder_overwiew.txt" (
for /F usebackq^ delims^=^ eol^= %%L in ("%APPDATA%\folder_overview.txt") do (
setlocal EnableDelayedExpansion
if defined LINE echo(!LINE!
endlocal
set "LINE=%%L"
)
)
我无法检测到您想做什么,但当您
cd
进入每个目录时,我假设您想在树中的每个文件夹中做一些事情:
@echo off
cd /d "c:\users"
for /f %%i in (' dir /s /b /ad ^|findstr /v "AppData All.Users Public" ') do (
pushd "%%i"
echo now working in: %%i
echo doing something here in %%~ni
popd
)
你想要最后一条非空行吗?为什么计数?只需使用
for/F%%L
loop overfolder_overview.txt
并在其正文中设置“LINE=%%L”,因此LINE
在每次迭代中都会被覆盖,并最终包含最后一行(请记住for/F
会自己跳过空行)。。。如果folder_overview.txt
不包含重复的行,则可以使用findstr/L/V/X/C
删除最后一行…对于命令set content=%content%%%i
,需要启用延迟扩展,因为它处于循环中,因此必须读取set content=!内容!%%我
…我会尝试一下,然后回复。谢谢你的快速回答!为什么echo goto:label
不转到label?嗯……如果DIR/A:D/S/B
给出了重复的,你就麻烦了,我想:DThanks alot@aschipfl:]可以跳过一些文件夹吗?我想跳过“findstr/v AppData | findstr/v All.Users | findstr/v Public”文件夹。顺便说一句,这正是我要找的工作。我真的很感谢你的代码!非常感谢@Stephan!