[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】请教大佬帮忙排批处理下错误。

本帖最后由 aaaa25852 于 2021-10-5 16:03 编辑

主要是两个命令的组合显示
1. 首先使用‘date /t’得到今天的年月日
2. 通过今天的年月日来遍历目录下今天修改过的文件
如果满足文件修改日期为今天,那么我就把文件信息打印出来。
dir /a:-d | findstr 2021/10/05

我能猜到错误应该是 “findstr !ct! %%x && echo %%x %%y” 这里,但是我不知道该如何修改。。。。。希望大佬教下怎么改。。。。

这是我写的命令
  1. @echo off   
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set var=
  4. for /f "delims=, " %%i in ('date /t') do (
  5. set var=%%i
  6. echo !var!
  7. for /f "delims=, tokens=1,* skip=5" %%x in ('dir /a:-d') do (
  8. call findstr !var! %%x && echo %%x %%y
  9. )
  10. )
  11. pause
  12. goto :eof
复制代码
后来我想通过 if 来比较字符串,但是更离谱,直接批处理起不来。。。。。
  1. @echo off   
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set var=
  4. for /f "delims=, " %%i in ('date /t') do (
  5. set var=%%i
  6. echo !var!
  7. for /f "delims=, tokens=1,* skip=5" %%x in ('dir /a:-d') do (
  8. if /i !var! == %%x(
  9. echo %%x %%y
  10. )
  11. )
  12. )
  13. pause
  14. goto :eof
复制代码
虽然找到【折中】中的方法用文件存储在查找,但是我并不想通过文件中转(霸蛮)能否直接用代码实现吗?
  1. @echo off   
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set var=
  4. del 1.txt
  5. for /f "delims=, tokens=1,* skip=5" %%x in ('dir /a:-d') do (
  6. echo %%x %%y >> 1.txt
  7. )
  8. for /f "delims=, " %%i in ('date /t') do (
  9. set var=%%i
  10. findstr !var! 1.txt >> 2.txt
  11. )
  12. pause
  13. goto :eof
复制代码
但是输出却是
  1. FINDSTR: 无法打开 2021/10/05
  2. FINDSTR: 无法打开 2021/09/27
  3. FINDSTR: 无法打开 2021/09/27
  4. FINDSTR: 无法打开 2021/09/27
  5. FINDSTR: 无法打开 2021/10/05
  6. FINDSTR: 无法打开 2021/09/27
  7. FINDSTR: 无法打开 2021/09/27
  8. FINDSTR: 无法打开 2021/09/26
  9. FINDSTR: 无法打开 2021/09/27
  10. FINDSTR: 无法打开 2021/09/26
  11. FINDSTR: 无法打开 2021/09/26
  12. FINDSTR: 无法打开 11
  13. FINDSTR: 无法打开 个文件
  14. FINDSTR: 无法打开 26
  15. FINDSTR: 无法打开 0
  16. FINDSTR: 无法打开 个目录
  17. FINDSTR: 无法打开 426
  18. 请按任意键继续. . .
复制代码

回复 10# Fit


可以,很好

TOP

回复 10# Fit


        感谢抽空答复,问题解决了

TOP

回复 8# newswan


    感谢抽空答复,问题解决了

TOP

第二个for改成这样可以不
       for /f "tokens=* " %%x in ('dir /a:-d ^| find "!var!"') do (
                echo %%x
        )
Fit Strong

TOP

本帖最后由 Fit 于 2021-10-5 15:09 编辑

错-------------------------------------------
Fit Strong

TOP

本帖最后由 newswan 于 2021-10-5 02:30 编辑

最好不要用tab,转成空格,4个就好
tab通常是8个

TOP

本帖最后由 newswan 于 2021-10-5 02:15 编辑

回复 6# aaaa25852


    if 后面的括号?加个空格试试

TOP

本帖最后由 aaaa25852 于 2021-10-5 01:35 编辑

回复 2# newswan


    厉害了。但是我没想明白为什么我写的if会直接崩溃。。。。
  1. @echo off   
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set var=
  4. for /f "delims=, " %%i in ('date /t') do (
  5. set var=%%i
  6. echo !var!
  7. for /f "delims=, tokens=1,* skip=5" %%x in ('dir /a:-d') do (
  8. if /i !var! == %%x(
  9. echo %%x %%y
  10. )
  11. )
  12. )
  13. pause
  14. goto :eof
复制代码
------------------
仅仅只是 if 两个比较值写反了就会崩溃。。。。

TOP

回复 3# newswan


    没想到凌晨还有大佬逛论坛的。。。

TOP

回复 2# newswan


    为什么我写的 if == 批处理会直接崩溃呢。。。

TOP

获取文件修改日期
  1. for /f "usebackq tokens=* delims=" %%a in (`dir /b "*.txt"`) do (
  2.     echo "%%~ta"
  3. )
复制代码

TOP

本帖最后由 newswan 于 2021-10-5 01:11 编辑
  1. for /f "delims=, " %%i in ('date /t') do (
  2.     set d=%%i
  3. )
  4. for /f "delims=, tokens=1,* skip=5" %%x in ('dir /a:-d') do (
  5.     echo %%x | findstr %d% && echo %%x %%y
  6. )
复制代码
用不着findstr
  1. for /f "delims=, tokens=1,* skip=5" %%x in ('dir /a:-d') do (
  2.     if %%x==%d%  echo %%x %%y
  3. )
复制代码

TOP

返回列表