Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件中FOR/F和WMIC的转义时间和转义内容_Windows_Batch File_For Loop_Escaping_Wmic - Fatal编程技术网

Windows 批处理文件中FOR/F和WMIC的转义时间和转义内容

Windows 批处理文件中FOR/F和WMIC的转义时间和转义内容,windows,batch-file,for-loop,escaping,wmic,Windows,Batch File,For Loop,Escaping,Wmic,我有以下代码,应该以字符串形式返回文件的上次修改日期: :getLastModifiedDate @echo on SETLOCAL enabledelayedexpansion set FILE=%~f1 set FILE=!FILE:%NETWORK_DRIVE_SHARE_PATH%=%NETWORK_DRIVE_NAME%! set FILE=%FILE:\=\\% set RETURN_VALUE="internal script error" for /f "tokens=* us

我有以下代码,应该以字符串形式返回文件的上次修改日期:

:getLastModifiedDate
@echo on
SETLOCAL enabledelayedexpansion
set FILE=%~f1
set FILE=!FILE:%NETWORK_DRIVE_SHARE_PATH%=%NETWORK_DRIVE_NAME%!
set FILE=%FILE:\=\\%
set RETURN_VALUE="internal script error"

for /f "tokens=* usebackq" %%d in (`wmic datafile where Name^="%FILE%" get lastmodified ^| findstr ^"[0-9]^"`) do ( set tmpd="%%d ddd"
    echo 111111 %tmpd%
    echo 222222 !tmpd!
    echo 333333 %%tmpd%%
    set RETURN_VALUE=%tmpd:~0,14%
)
(ENDLOCAL
    set getLastModifiedDateResult=%RETURN_VALUE%
)

exit
@echo off
goto :eof
我想

set tmpd="%%d ddd"
至少将
ddd
设置为
%tmpd%
的值

但是,在执行过程中,不执行任何操作:

C:\Windows\system32>for /F "tokens=* usebackq" %d in (`wmic datafile where Name="S:\\Actually\\Existing File.csv" get lastmodified | findstr "[0-9]"`) do (
set tmpd="%d ddd"  
    echo 111111   
    echo 222222 !tmpd!  
    echo 333333 %tmpd%  
    set RETURN_VALUE=~0,14 
)
我希望我的for循环是导致此问题的原因。当我在cmd.exe中执行完全相同的字符串时,我得到一个结果:

C:\Users\uuuu>for /f "tokens=* usebackq" %d in (`wmic datafile where Name^="S:\\Actually\\Existing File.csv" get lastmodified ^| findstr ^"[0-9]^"`) do ( set tmpd=%d )

[xxx@yyy auf zzzz]
  ) sers\yc067xd>(set tmpd=20150413172700.000000+120

[yc067xd@R0199 auf FS00QHE0]
C:\Users\uuuu>echo %tmpd%
20150413172700.000000+120
我哪里做错了什么?

您必须使用wmic吗? 有一种更简单的方法可以返回上次修改的日期:

FOR %%f IN ("%file%") DO SET lastmodified=%%~tf
因此,您的脚本如下所示:

:getLastModifiedDate
  @echo on
  SETLOCAL enabledelayedexpansion
  set FILE=%~f1
  set FILE=!FILE:%NETWORK_DRIVE_SHARE_PATH%=%NETWORK_DRIVE_NAME%!
  set FILE=%FILE:\=\\%
  set RETURN_VALUE="internal script error"

  FOR %%f IN ("%FILE%") DO SET getLastModifiedDateResult=%%~tf
  set getLastModifiedDateResult=%getLastModifiedDateResult:~0, 10%
  @echo off
endlocal & goto :eof

提取文件日期问题的最直接解决方案可用于以文本字符串的形式获取创建的日期(和时间)和上次修改的日期(和时间)

此解决方案克服了一个特殊困难,即文件路径包含一个空格(或其他非字母数字字符)


对我来说,它在批处理文件中工作,可能您的文件
S:\\Actually\\Existing file.csv
不存在。顺便说一句,只有回声2222!tmpd有意义要处理WMIC的结果,您应该阅读@jeb。问题是:我可以通过在Notepad++中打开此路径来打开文件。因此,我非常确定该文件是存在的:/谢谢您的支持!tmpd!暗示。我很困惑什么时候该用哪个-怎么叫变量标识符。对于百分比和延迟扩展之间的差异,您可以读取以测试它,您应该使用命令行和批处理文件中的相同文件。您可以删除
^ | findstr^“[0-9]^
部分以查看真正的内容
@echo off

:: File location
SET file=C:\Users\%username%\Desktop\Get TIMESTAMP\file.txt

:: Get CREATED timestamp of specified file
FOR /F "tokens=1,* delims= " %%A IN ('DIR /T:C /A:-D "%file%" ^|FIND "/"') DO (
  SET Cdate=%%A
  SET Ctime=%%B
  SET Ctime=!Ctime:~0,5!
  :: Get file Creation Date
  SET  DCREATED=!Cdate!
  ECHO CREATED DATE: !DCREATED!
  :: Get file Creation Time
  SET TCREATED=!Ctime!
  ECHO CREATED TIME: !TCREATED!
) & ECHO.

:: Get LAST MODIFIED timestamp of specified file
FOR /F "tokens=1,* delims= " %%A IN ('DIR /T:W /A:-D "%file%" ^|FIND "/"') DO (
  SET Mdate=%%A
  SET Mtime=%%B
  SET Mtime=!Mtime:~0,5!
  :: Get file MODIFIED Date
  SET  DMODIFIED=!Mdate!
  ECHO MODIFIED DATE:  !DMODIFIED!
  :: Get file MODIFIED Time
  SET TMODIFIED=!Mtime!
  ECHO MODIFIED TIME:  !TMODIFIED!
) & ECHO.