【问题标题】:Store randomized folder in a batch script?将随机文件夹存储在批处理脚本中?
【发布时间】:2016-12-24 21:37:03
【问题描述】:

我有一个脚本可以自动将 NAPS2(扫描程序)最新扫描结果备份到另一个驱动器,并根据其时间戳重命名它... 问题是,NAPS2 使用随机文件夹名称作为其扫描结果的父文件夹......例如 "C:\Users\用户名\AppData\Roaming\NAPS2\recovery\4j4v.fbmv\scanresult001.jpg"

这是代码,我如何指向那​​个随机文件夹?

SET ROOTDIR=C:\Users\Operator\AppData\Roaming\NAPS2\recovery\
for /f %%i in ('dir %ROOTDIR% /b /AD /od /t:w') do set LATEST_DIR=%%i >NUL
SET RANDOMDIR=%ROOTDIR%%LATEST_DIR%
for /F "delims=" %%a in ('dir  /b /od "%RANDOMDIR%\*.jpg"') do set Youngest=%%a
echo Backing up %Youngest%

for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12,2%
set mydate=%YYYY%%MM%%DD%@%HH%%Min%%Sec%

copy "%Youngest%" "D:\Backup\%mydate%.jpg"

输出

C:\>for /F "delims=" %a in ('dir /b /od "C:\Users\Operator\AppData\Roaming\NAPS2
\recovery\jfwkui0s.pmd \*.jpg"') do set Youngest=%a
File Not Found

C:\>echo Backing up
Backing up

C:\>for /F "delims=" %a in ('wmic OS Get localdatetime | find "."') do set dt=%a


 :\>set dt=20160818125756.950000+420

C:\>set YYYY=2016

C:\>set MM=08

C:\>set DD=18

C:\>set HH=12

C:\>set Min=57

C:\>set Sec=56

C:\>set mydate=20160818@125756

C:\>copy "" "D:\Backup\20160818@125756.jpg"
The system cannot find the path specified.

我认为这可能是因为随机文件夹有“。”在里面..我尝试了“新文件夹”,其中有空间,但它也不起作用

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    要做到这一点,请使用https://stackoverflow.com/a/30311479/6550457中显示的方法

    您只希望对目录执行此操作,因此请使用 a-d 而不是 ad

        SET ROOTDIR=C:\Users\username\AppData\Roaming\NAPS2\recovery\
        for /f %%i in ('dir %ROOTDIR% /b /AD /od /t:w') do set LATEST_DIR=%%i>NUL
        echo Latest Dir = %LATEST_DIR%
    

    所以在你的脚本中你会使用它:

        SET ROOTDIR=C:\Users\username\AppData\Roaming\NAPS2\recovery\
        for /f %%i in ('dir %ROOTDIR% /b /AD /od /t:w') do set LATEST_DIR=%%i>NUL
        SET RANDOMDIR=%ROOTDIR%%LATEST_DIR%
        echo Backing up %RANDOMDIR%
    
        for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
        set YYYY=%dt:~0,4%
        set MM=%dt:~4,2%
        set DD=%dt:~6,2%
        set HH=%dt:~8,2%
        set Min=%dt:~10,2%
        set Sec=%dt:~12,2%
        set mydate=%YYYY%%MM%%DD%@%HH%%Min%%Sec%
    
        copy "%RANDOMDIR%" "E:\Backup\%mydate%.png"
    

    【讨论】:

    • 如何调用 latest_dir?用这个获取“找不到文件”......但它正确列出了 /F "delims=" %%a in ('dir /b /od "C:\Users\Operator\AppData\Roaming\NAPS2\ recovery\%LATEST_DIR%*.png"') 设置 Youngest=%%a 副本 "C:\Users\Operator\AppData\Roaming\NAPS2\recovery\%LATEST_DIR%\%Youngest%" "E:\Backup\%我的日期%.png"
    • 我已在答案中添加了用法。
    • for /F "delims=" %%a in ('dir /b /od "%RANDOMDIR%*.jpg"') do set Youngest=%%a 我的脚本也需要最年轻的函数。 .但是我在运行这个时找不到文件。 .edited 主要问题
    • @denywinarto 将代码放入反引号 `likethis` 否则没有人可以阅读您写的内容
    • 如果 youngest 应该是随机文件夹名称,那么只需将 latest_dir 重命名为 youngest。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多