【问题标题】:Scheduled batch file error (0xff) - Executing normal it work fine计划的批处理文件错误(0xff) - 正常执行它工作正常
【发布时间】:2019-05-02 11:27:44
【问题描述】:

我有这个批处理文件要执行。

@echo off 
set /a count=0
for /f "tokens=1delims=:" %%i in ('findstr /n "^" "foto1.txt"') do set /a count=%%i
set /a rd=%random%%%count
if %rd% equ 0 (set "skip=") else set "skip=skip=%rd%"
set "found="
for /f "%skip%tokens=1*delims=:" %%i in ('findstr /n "^" "foto1.txt"') do if not defined found set "found=%%i"&set "var=%%j"
echo.%var%
break > urlfoto1.txt
echo %var% >> urlfoto1.txt
set /a count=0
for /f "tokens=1delims=:" %%i in ('findstr /n "^" "foto2.txt"') do set /a count=%%i
set /a rd=%random%%%count
if %rd% equ 0 (set "skip=") else set "skip=skip=%rd%"
set "found="
for /f "%skip%tokens=1*delims=:" %%i in ('findstr /n "^" "foto2.txt"') do if not defined found set "found=%%i"&set "var=%%j"
echo.%var%
break > urlfoto2.txt
echo %var% >> urlfoto2.txt
set /a count=0
for /f "tokens=1delims=:" %%i in ('findstr /n "^" "foto3.txt"') do set /a count=%%i
set /a rd=%random%%%count
if %rd% equ 0 (set "skip=") else set "skip=skip=%rd%"
set "found="
for /f "%skip%tokens=1*delims=:" %%i in ('findstr /n "^" "foto3.txt"') do if not defined found set "found=%%i"&set "var=%%j"
echo.%var%
break > urlfoto3.txt
echo %var% >> urlfoto3.txt

此脚本正在从文件列表中生成随机 jpg url,并使用 1 个随机 jpg url 创建一个 txt 新文件。

当我手动执行它时,它工作正常。 但是,当我使用 Windows 任务计划程序 进行计划时,我检索到 (0xFF) 错误。 (0xff) 是什么意思?为什么调度不起作用?

【问题讨论】:

    标签: batch-file scheduled-tasks windows-sbs


    【解决方案1】:

    类似于LotPings 答案:

    @Echo Off
    CD /D "%~dp0"
    For %%A In (1 2 3) Do Call :Sub "%%A"
    Pause
    GoTo :EOF
    
    :Sub
    For /F "Delims==" %%A In ('Set line[ 2^>Nul') Do Set "%%A=" 
    Set "total="&Set "randlinenum="
    For /F "Tokens=1*Delims=[]" %%A In ('Find /V /N ""^<"foto%~1.txt"'
    )Do Set "line[%%A]=%%B"&Set "total=%%A"
    Set /A randlinenum=1+(%RANDOM% %% total)
    SetLocal EnableDelayedExpansion
    Echo(!line[%randlinenum%]!
    (Echo(!line[%randlinenum%]!)>"urlfoto%~1.txt"
    EndLocal
    Exit /B
    

    请注意,Find /V /N ""(或 FindStr /N "^" 构造也将包含任何空行,因此如果这些空行存在于您的任何 foto* 文件中,这可能会随机选择并输出一个空行。

    【讨论】:

      【解决方案2】:
      • 我不喜欢你的批次中的冗余,使用计数for /lcall :sub
      • 使用find /c 更容易获得文件的行数。
      • 使用more +x 避免了区分跳过计数的需要。
      • 只输出一行时,直接使用&gt;覆盖之前的内容。

      这里使用%~dp0(批处理文件夹)进行输入/输出。

      :: Q:\Test\2019\05\02\SO_55951454.cmd
      @echo off 
      cd /d "%~dp0"
      for /L %%L in (1,1,3) do Call :Sub %%L
      Goto :Eof
      
      :Sub
      for /f %%i in ('find /C /V "" ^<"foto%1.txt"') do set count=%%i
      set /a "rd=%random% %% count"
      for /f "delims=" %%i in ('more +%rd% "foto%1.txt"') do set "var=%%i"&goto :cont
      :cont
      echo.%var%
      >"urlfoto%1.txt" echo.%var%
      Goto :Eof
      

      【讨论】:

        猜你喜欢
        • 2013-09-26
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 1970-01-01
        • 2016-01-26
        • 2022-01-10
        • 2019-03-04
        • 2014-10-02
        相关资源
        最近更新 更多