如何跳过cmd中运行时更改的行数?

时间:2016-02-09 08:23:47

标签: batch-file cmd delete-file skip

我有很多文件夹,我需要从任何文件夹中删除其中最旧的文件,我需要删除的文件数量改变了任何迭代,所以我试图做一个for循环,在任何迭代中做日期排序,之后我做的文件顶部最旧的文件" skip = variable"这个变量改变了任何迭代,但它不起作用。

有人知道如何在批处理文件中解决它吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

解析for /F命令后,"skip... delims... tokens"命令(for /F等)的选项可以更改。您需要在不同的子例程中更改"skip=!numOfFiles!"的值,因此每次执行时都会解析for /F命令:

@echo off
setlocal EnableDelayedExpansion

FOR /F "tokens=1,2 delims= " %%i in ( C:\folder\varibales_file.txt ) do (
   set numOfFiles=%%j
   pushd %%i
   call :Sub !numOfFiles!
   popd
)
goto :EOF


:Sub numOfFiles
for /f "skip=%1 delims=" %%F in ('dir "C:\folder_path_to_delete\%%i" /b /o-d') do (
   rd /s /q "C:\folder_path_to_delete\%%i\%%F"
)

答案 1 :(得分:0)

我对您的"单行代码"进行了以下更改:

  • 重新格式化为适当且可读的批处理文件

  • 使用numOfOFiles作为延迟变量(您将其作为无法正常工作的字符串)

  • 用引号括起所有路径/文件名,以正确处理目标或文件名中的空格

  • 出于同样的原因添加了delims=
  • 如果输出满足您,则
  • 删除ECHO

(仅限核心代码,没有检查它是否存在,你想要什么)

@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=1,2 delims= " %%i in (C:\folder\varibales_file.txt) do (
  set numOfFiles=%%j
  pushd %%i 
  for /f "skip=!numOfFiles! delims=" %%F in ('dir "C:\folder_path_to_delete\%%i" /b /o-d') do (
    ECHO rd /s /q "C:\folder_path_to_delete\%%i\%%F"
  popd
) 

您确定要使用rd(删除目录),而不是del(DELete文件)吗?