Пакет Windows, если не равно, не выполняется, если предложение - PullRequest
0 голосов
/ 22 мая 2019

У меня есть файл .bat для выполнения на компьютере с Windows Server 2012 R2. Проблема в том, что мне нужно добавить «если не равно», но когда я пытаюсь его выполнить, код не работает. Я знаю, что проблема в if, потому что я пытался без if, и это работает.

setlocal enabledelayedexpansion

set anno=%date:~6,4%
set mese=%date:~3,2%
set giorno=%date:~0,2%

set ore=%time:~0,2%
set minuti=%time:~3,2%
set secondi=%time:~6,2%

e:
mkdir "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%"

move \\gbjob09\Info-Bit\Sql_Ges\PRESENZE\2019\*.old "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%"
cd "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%"

for /f %%a in ('dir /b *.old') do (
    set originalname=%%a 
    set timbrnumber=!originalname:~4,4!
    if NOT %timbrnumber% == "0584" (
        if NOT %timbrnumber% == "0585" (
            set shortname=9!originalname:~4,4!
            echo !shortname!  
            for /f "tokens=*" %%b in (%%a) do (
                echo %%b!shortname!>> "Presenze.txt"
            )
        )
    )
)

copy "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%\Presenze.txt" "E:\Presenze\presenze.txt"

exit

Как видите, проблема только в этой очень маленькой части:

if NOT %timbrnumber% == "0584" (

Я уже пытался удалить двойной, если он все еще не работает.

Я знаю, что старый (этот) код работает:

setlocal enabledelayedexpansion

set anno=%date:~6,4%
set mese=%date:~3,2%
set giorno=%date:~0,2%

set ore=%time:~0,2%
set minuti=%time:~3,2%
set secondi=%time:~6,2%

e:
mkdir "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%"

move \\gbjob09\Info-Bit\Sql_Ges\PRESENZE\2019\*.old "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%"
cd "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%"

for /f %%a in ('dir /b *.old') do (
    set originalname=%%a 
    set shortname=9!originalname:~4,4!
    echo !shortname!  
    for /f "tokens=*" %%b in (%%a) do (
        echo %%b!shortname!>> "Presenze.txt"
    )
)

copy "E:\Presenze\%anno%%mese%%giorno%%ore%%minuti%%secondi%\Presenze.txt" "E:\Presenze\presenze.txt"

exit

Я только добавил переменную:

set timbrnumber=!originalname:~4,4!

, который должен работать (он должен получить 4 символа после исключения 4 символов из переменной имени оригинала), например, короткое имя, печатать 9 и 4 символа после исключения 4 символов из переменной оригинального имени, но я не совсем уверен, потому что я не очень знать пакет Windows (это первый раз, когда я использую его, и оригинальный код не был моим). После этого мне нужно только проверить, не является ли timbrnumber «0584» и не «0585», но все, что я пробовал, было неудачным.

1 Ответ

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

Короче говоря, поскольку ваша переменная set и используется внутри блока кода и двойные кавычки требуются с обеих сторон ==, этот раздел должен решить вашу проблему:

if NOT "1!timbrnumber! == "10584" (
    if NOT "!1timbrnumber!" == "10585" (

, котораяможет быть лучше написано как:

if 1!timbrnumber! neq 10584 (
    if 1!timbrnumber! neq 10585 (

Еще одно наблюдение, ваш time:

set ore=%time:~0,2%
set minuti=%time:~3,2%
set secondi=%time:~6,2%

может быть лучше создан как:

 set mytime=%time::=%
 echo %mytime:0,6%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...