我在批量处理循环中的变量时遇到了一些困难。当我认为我把它弄下来的时候,我会找到一个例子,它不会像我期望的那样起作用,而且我觉得我一直在用这个... ...
我已经编写了我的全部代码,因为它有所不同,基本上我有一个包含许多子文件夹的存档文件夹,我想检查我的上传数据(它将被移动到存档文件夹的末尾)脚本 - 当我使这部分工作时写入)已经处理完毕。如果是这样,请移至带有日期的重复项目文件夹:
@echo off
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set localDT=%%j
set localYYYY=%localDT:~0,4%
set localMM=%localDT:~4,2%
set localDD=%localDT:~6,2%
set localDate=%localYYYY%-%localMM%-%localDD%
set localTime=%localDT:~8,2%:%localDT:~10,2%
for %%f in ("C:\Test\837Store\*.837") DO if exist /R "C:\Test\Archive\%%~nxf" (
set VariableTemp=%%~nxf
echo %VariableTemp%
IF NOT EXIST "C:\Test\Archive\Duplicates" mkdir "C:\Test\Archive\Duplicates"
IF NOT EXIST "C:\Test\Archive\Duplicates\%localYYYY%" mkdir "C:\Test\Archive\Duplicates\%localYYYY%"
IF NOT EXIST "C:\Test\Archive\Duplicates\%localYYYY%\%localMM%" mkdir "C:\Test\Archive\Duplicates\%localYYYY%\%localMM%"
copy "%%~nxf" "C:\Test\Archive\Duplicates\%localYYYY%\%localMM%"
echo %localDate% %localTime% Duplicate claims file: %%~dpnxf File moved to archive >> "C:\Test\Log\Error.log"
)
pause
我的问题是,变量%% f似乎没有通过循环设置。运行mkdir命令,但是当我们到达副本时,我收到“找不到文件”错误。为了试着看看发生了什么,我包含了VariableTemp并根据代码进行设置,期望看到文件的名称和扩展名。相反,我的回音是打印“%~nxf”
有谁能帮我理解这些变量是如何工作的?为什么我没有看到837Store中的文件名?
仅供参考,我在C:\ Test \ 837Store中有以下2个文件:
1.837 2.837
我在C:\ Test \ Archive \ 2013 \ 08中有相同的2个文件,所以希望它们从837Store移动到相关的Duplicates文件夹。
感谢。
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set localDT=%%j
set localYYYY=%localDT:~0,4%
set localMM=%localDT:~4,2%
set localDD=%localDT:~6,2%
set localDate=%localYYYY%-%localMM%-%localDD%
set localTime=%localDT:~8,2%:%localDT:~10,2%
mkdir "U:\Test\Archive\Duplicates\%localYYYY%\%localMM%" 2>nul
for /R U:\Test\837Store %%f in (*.837) DO ECHO processing %%~ff&if exist "U:\Test\Archive\%%~nxf" (
IF EXIST "u:\Test\Archive\Duplicates\%localYYYY%\%localMM%\%%~nxf" (
echo %localDate% %localTime% Duplicate claims file: %%~dpnxf File ALREADY DUPLICATED >> "u:\Error.log"
) ELSE (
MOVE "%%~ff" "u:\Test\Archive\Duplicates\%localYYYY%\%localMM%"
echo %localDate% %localTime% Duplicate claims file: %%~dpnxf File moved to archive >> "u:\Error.log"
)
)
rmdir "U:\Test\Archive\Duplicates\%localYYYY%\%localMM%" 2>nul
rmdir "U:\Test\Archive\Duplicates\%localYYYY%" 2>nul
rmdir "U:\Test\Archive\Duplicates" 2>nul
GOTO :EOF
这是我的解释。
我已经使用我的RAMdrive进行测试,因此需要更改driveletter,以及错误日志位置。
我已经为已经存在的重复添加了额外的测试 - 只报告这种情况。
我已将您的COPY
更改为MOVE
以符合您的叙述。无论哪种方式,如果您希望它被抑制,那么附加到命令的>nul
应该禁止“1个文件复制/移动”消息。
MD/MKDIR
将在目标上方创建任何必要的子目录。
最后的三个'rmdir / RD`旨在删除任何带有目标名称的空子目录。