Запланированная ошибка пакетного файла (0xff) - нормально работает, работает нормально - PullRequest
0 голосов
/ 02 мая 2019

У меня есть этот командный файл для выполнения.

@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

Этот скрипт генерирует случайный URL-адрес JPG из списка в файле и создает новый текстовый файл с 1 случайным URL-адресом JPG.

Когда я выполняю его вручную, он работает нормально.Но когда я иду к планированию с помощью Windows Task Scheduler , я получаю (0xFF) ОШИБКУ.Что означает (0xff)?И почему планирование не работает?

Ответы [ 2 ]

1 голос
/ 02 мая 2019

И аналогично 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* файлов, можно было бы произвольно выбрать и вывести пустую строку.

0 голосов
/ 02 мая 2019
  • Мне не нравится избыточность в вашей партии, используйте подсчет for /l и call :sub
  • с использованием find /c проще получить количество строк в файле.
  • использование more +x устраняет необходимость дифференцировать количество пропусков.
  • при выводе только одной строки, напрямую используйте > для перезаписи предыдущего содержимого.

Здесь используется %~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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...