在这种情况下,xcopy整个文件夹



这是我在相同的代码中遇到的另一个问题,我已经寻求帮助,所以我不确定是否是重复的。

现在的问题是当我运行脚本时,在命令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:devWORKING"
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 "%%kAssayInfo.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 statment的范围,因此它将继续更改!即使它匹配,并将发现的最后一个值不等于Cou1。

我们可以在此处使用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:devWORKING!dst!" /E
    pause
)

如果您在一开始就提供了所需的所有信息,您将不需要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:devWORKING%%~nxB" /ECIHRKY>Nul 2>&1

根据您提供的信息,此脚本将从C:dev运行。

最新更新