这是我在同一代码中遇到的另一个问题,我已经寻求帮助,所以我不确定它是否重复。
现在的问题是,当我运行脚本时,我希望能够使用xcopy命令复制文件所在的整个文件夹,而不仅仅是文件。
@echo off
setlocal enabledelayedexpansion
set /p COU1=COU No. 1 serial number?:
echo COU serial number is: %COU1%
for /f %%i in ('dir /s /b /a-d AssayInfo.txt') do (
for /f "tokens=2" %%a in ('type "%%~fi" ^| findstr /i "CouID"') do set "number=%%a"
echo Found number !number! in file "%%~fi"
if !number!==!COU1! xcopy "%%~fi" "C:\dev\WORKING"
pause
)
为简化起见,我想复制整个文件夹,找到文件“〜fi”而不是仅文件
我也尝试过这样的事情:
set /p COU1=COU No. 1 serial number?:
echo COU serial number is: %COU1%
for /D %%k in ("C:\dev\*") do for /f "tokens=1,* delims=: " %%i in ('type "%%k\AssayInfo.txt" ^| findstr /i CouID') do set "number=%%j"
if %number%==%COU1% (echo Hello it worked) else (echo ERROR:No files with that serial number)
pause
但是这里的问题是IF语句位于FOR之外,因此它将不断更改!number!即使匹配,也将采用找到的最后一个值,而不是等于COU1的值。
答案 0 :(得分:1)
我们可以在这里使用robocopy。但是您尝试复制文件名而不是文件夹,请记住我们将!number!
设置为找到的值。
@echo off
setlocal enabledelayedexpansion
set /p COU1=COU No. 1 serial number?:
echo COU serial number is: %COU1%
for /f %%i in ('dir /s /b /a-d AssayInfo.txt') do (
for /f "tokens=2" %%a in ('type "%%~fi" ^| findstr /i "CouID"') do set "number=%%a"
echo Found number !number! in file "%%~fi"
set "fpat=%%~dpi"
set "fpat=!fpat:~0,-1!"
for %%u in (!fpat!) do set "dst=%%~nu"
if "!number!"=="!COU1!" robocopy "!fpat!" "C:\dev\WORKING\!dst!" /E
pause
)
答案 1 :(得分:1)
如果您一开始就提供了所需的所有信息,就不需要4
个问题来完成此任务。
根据我们现在所知道的,我建议您执行以下任务:
@Echo Off
Set "COU1="
:Ask
Set /P "COU1=COU No. 1 serial number?: "
If Not Defined COU1 GoTo Ask
For /F "Delims=" %%A In ('FindStr /SMIC:"CouId: %COU1%" "AssayInfo.txt" 2^>Nul^
^|FindStr /VBLI "WORKING\\"') Do @For %%B In ("%%~dpA."
) Do XCopy "%%~B" "C:\dev\WORKING\%%~nxB" /ECIHRKY>Nul 2>&1
根据您提供的信息,该脚本将从C:\dev
运行。